这道题的算法思想就是:每次将数组中的中间元素与输入的元素相比较,若大于输入的元素,则将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; }
转载请注明原文地址: https://ju.6miu.com/read-1309155.html