二分查找
二分查找是一种很经典的查找数字的算法,经常用作优化时间复杂度上
问题描述 公司举办年会,为了活跃气氛,设置了摇奖环节。参加聚会的每位员工都有一张带有号码的抽奖卷。现在,主持人依次公布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;
}
评论