题目描述
输入一个数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); }}
}