将n个从小到大排序的整数(n<1000000)从1~n进行编号,并给出一个待查找的整数m,请使用二分法进行查找。
输入
输入数据有多组,每组包括3行,第一行为整数n,第二行包括n个整数,以空格分隔,第三行为整数m。
输出
对于每组输出,如果能够在序列中找到整数m,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None。
样例输入
10
1 2 4 5 6 7 8 9 10 11
10
10
1 2 4 5 6 7 8 9 10 11
12
样例输出
9
None
#include <bits/stdc++.h>
using namespace std;
long long a[1000005],n,m;
void erfen(int l,int r)
{
long long mid=(l+r)/2;
while(l<=r)
{
if(a[mid]>m)
{
r=mid-1;
}
else if(a[mid]<m)
{
l=mid+1;
}
if(a[mid]==m)
{
cout<<mid<<endl;
return;
}
mid=(l+r)/2;
}
cout<<"None"<<endl;
return;
}
int main()
{
while(cin>>n)
{
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
erfen(1,n);
}
return 0;
}
没有处理多组数据。是哪个用例错了还是WA