题目描述
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出
对于每组输入,请输出结果。
样例输入
4
1 2 3 4
3
样例输出
2
思路:可以直接进行查找,也可以用二分法查找。题中有点坑,他没有说明这n个数是从小到大输入的,不过也不影响,既然它放到了二分的模板里,那肯定是从小到大排的。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int binarySearch(int a[],int left,int right,int x){
int mid;
while(left<=right){
mid=left+(right-left)/2;
if(a[mid]==x) return mid;
else if(a[mid]<x) left=mid+1;
else right=mid-1;
}
return -1;
}
int main()
{
int left,right,n,x;
int a[200];
while(scanf("%d",&n)!=EOF){
int i;
for(i=0;i<n;i++)
cin >>a[i];
cin >>x;
left=0;
right=n-1;
cout <<binarySearch(a,left,right,x)<<endl;
}
return 0;
}