Codeup——585 | 问题 A: 找x(二分查找)

题目描述

输入一个数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;
}

猜你喜欢

转载自blog.csdn.net/qq_44888152/article/details/106805884
今日推荐