这道题的算法思想就是:每次将数组中的中间元素与输入的元素相比较,若大于输入的元素,则将j=mid-1,若小于输入的元素,则i=mid+1;若等于,则将mid的值输出即可;注意判定的条件是i<=j。
代码如下:
#include <stdio.h>
int a[1000000];
int main(){
int n,m,i,d,j,mid,f;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
while(m--){
f=0;
scanf("%d",&d);
i=0;
j=n-1;
while(i<=j){/*判定条件要始终满足i<=j*/
mid=(i+j)/2;
if(d>a[mid])
i=mid+1;
else if(d<a[mid])
j=mid-1;
else{
f=1;
printf("%d\n",mid);
break;
}
}
if(f==0)
printf("-1\n");
}
return 0;
}