任务描述
题目描述:将n个从小到大排序的整数(n<1000000)从1~n进行编号,并一个待查找的整数m,请使用二分法进行查找。
####相关知识(略)
####编程要求
根据提示,在右侧编辑器Begin-End处补充代码。
输入
输入包括3行,第一行为整数n,第二行包括n个整数,以空格分隔,第三行为整数m。
输出
如果能够在序列中找到整数m,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None。
测试说明
样例输入:
10
1 2 4 5 6 7 8 9 10 11
10
样例输出:
9
开始你的任务吧,祝你成功!
代码示例
#include <stdio.h>
int a[1000005],n,t;
int BS(){
int l=0,r=n-1;
while(l<=r){
int m=(l+r)>>1;
if(t<a[m])
r=m-1;
else if(t>a[m])
l=m+1;
else if(a[m-1]<t)
return m;
else r=m-1;
}
return -1;
}
int main(){
while(~scanf("%d",&n)){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&t);
if(a[0]==t)
puts("1");
else{
int f=BS();
if(f!=-1){
printf("%d\n",f+1);
}
else
puts("None");
}}
return 0;
}