正确答案:
#include<stdio.h>
#include<math.h>
#define N 1001
int num[N];
int main()
{
int n,i,a,flag=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
scanf("%d",&a);
for(i=0;i<n;i++)
{
if(num[i]==a)
{
printf("%d\n",i+1);
flag=1;
break;
}
}
if(!flag)
{
printf("-1\n");
}
return 0;
}
我的答案:错误,非常鬼畜,还需测试
#include <stdio.h>
int BinarySearch(int s[],int n,int key)
{
int low,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2; //计算中间元素序号
if(s[mid]==key) //中间元素与关键字相等
return mid;
else if(s[mid]>key) //中间元素大于关键字
high=mid-1;
else
low=mid+1;
}
return -1; //查找失败返回-1
}
int main()
{
int n,x,i;
int a[n];
scanf("%d",&n);
for(i = 0; i < n; i++)
scanf("%d",&a[i]);
scanf("%d",&x);
int pos=BinarySearch(a,n,x);
if(pos>=0)
printf("%d",pos-1);
else
printf("-1");
return 0;
}
思路:折半查找