任务描述
题目描述:将n个从小到大排序的整数(n<1000000)从1~n进行编号,并一个待查找的整数m,请使用二分法进行查找。
相关知识
为了完成本关任务,你需要掌握:1.一维数组 2.二分法(折半查找)
编程要求
输入
输入包括3行,第一行为整数n(元素个数),第二行包括n个整数(数组元素),以空格分隔,第三行为整数m(要查找的元素)。
输出
如果能够在序列中找到整数m,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None。
测试说明
样例输入:
10
1 2 4 5 6 7 8 9 10 11
10
样例输出:
9
代码如下
#include<stdio.h>
int main(void)
{
int n,m,s,b,mid,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
s=0;
b=n-1;
while(s<=b)
{
mid=(b+s)/2;
if(m>a[mid])
{
s=mid+1;
}
else if(m<a[mid])
{
b=mid-1;
}
else if(m==a[mid])
{
printf("%d",mid+1);return 0;
}
}
printf("None");
return 0;
}