抽奖2(信奥)
【问题描述】
公司举办年会,为了活跃气氛,设置了摇奖环节。参加聚会的每位员工都有一张带有号码的抽奖券。现在,主持人从小到依次公布了n个不同的获奖号码,小谢看着自己抽奖券上的号码win,无比紧张。请编写一个程序,如果小谢获奖了,请输出他中奖的是第几个号码,如果没有中奖,请输出0。
【输入格式】
第一行一个正整数n,表示有n个获奖号码,n > 2 && n <= 100。
第二行包含n个正整数,之间用一个空格隔开,表示依次公布的n个获奖号码。
第三行一个正整数win,表示小谢抽奖券上的号码。
获奖号码 >= 1,win < 10000。
【输出格式】
一行一个整数,如果小谢中奖了,表示中奖的是第几个号码;如果没有中奖,则为0。
【输入样例】
7
1 2 3 4 5 6 17 955
3
【参考程序如下】
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int n,i,win,f,left,right,mid,g[101];
scanf("%d",&n);
for(i = 1; i <= n; i++)
scanf("%d",&g[i]);
scanf("%d",&win);
f = 0;
left = 1;right = n;
while(left <= right){
mid = (left + right) / 2;
if(g[mid] == win)
{
f = mid;
break;
}
if(win < g[mid])
right = mid - 1;
if(g[mid] < win)
left = mid + 1;
}
printf("%d\n",f);
return 0;
}
【运行结果如下】