二分查找是一种很经典的查找数字的算法,经常用作优化时间复杂度上

问题描述 公司举办年会,为了活跃气氛,设置了摇奖环节。参加聚会的每位员工都有一张带有号码的抽奖卷。现在,主持人依次公布n个不同的获奖号码,小谢看着自己抽奖上的号码win,无比紧张。请编写一个程序,如果小谢获奖了,请输出他中的第几个号码;如果没有中奖,请输出0。

输入
第一行一个正整数n,表示有n个获奖号码,2<n≤100。

第二行包含n个正整数,之间用一个空格隔开,表示依次公布的n个获奖号码。
第三行一个正整数num,表示第小谢抽奖卷上的号码。1≤获奖号码,win<10000。

输出
一行一个整数,如果小谢中奖了,表示中奖的是第几个号码;如果没有中奖,则为0。

样例输入 Copy

7
1 2 3 4 6 17 9555
3

样例输出 Copy

3

#include<cstdio>
	using namespace std;
int s[101],win;
int R(int l,int r){//设置一个二分函数
    if(l<=r){
        int mid=(r+l)/2;
        if(win==s[mid]){return mid;}
        if(win>s[mid]) return R(mid+1,r);
        if(win<s[mid]) return R(l,mid-1);
    }
    else return 0;
}
int main(){
    int n,f,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%d",&s[i]);
    scanf("%d",&win);
    f=R(1,n);
    printf("%d",f);
    return 0;	
}