题目描述
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出
对于每组输入,请输出结果。
样例输入
4 1 2 3 4 3
样例输出
2
一道水题,尝试硬要用2分查找写一下:
#include<stdio.h>
#include<algorithm>
using namespace std;
struct AA{
int num;
int n;
}a[210];
int binarySearch(AA a[],int left,int right,int x)
{
int mid;
while(left<=right)
{
mid=(left+right)/2;
if(a[mid].num<x)
{
return binarySearch(a,mid+1,right,x);
}else if(a[mid].num>x)
{
return binarySearch(a,left,mid-1,x);
}else
{
return mid;
}
}
return -1;
}
int cmp(AA a,AA b)
{
return a.num<b.num;
}
int main()
{
int n,i,x;
while(scanf("%d",&n)!=EOF)
{
i=0;
while(n--)
{
a[i].n=i;
scanf("%d",&a[i++].num);
}
scanf("%d",&x);
sort(a,a+i,cmp);
/*for(int j=0;j<i;j++)
{
printf("%d ",a[j][0]);
}*/
int flag=binarySearch(a,0,i-1,x);
if(flag==-1)
{
printf("-1\n");
}
else
{
printf("%d\n",a[flag].n);
}
}
}