7-7 最近邻 (10 分)
在一个非降序列中,查找与给定值最接近的元素。
输入格式:
第一行包含两个数,一个整数n,表示序列中元素个数。(1 ≤ n ≤ 1000000。),一个整数x,表示要查找x的最近邻。
第二行包含n个整数,为非降序列各元素。所有元素的大小均在1~1e9之间。
输出格式:
一个整数,为最接近相应给定值的元素值。若有多个值满足条件,输出最小的一个。
输入样例:
在这里给出一组输入。例如:
3 6 2 5 8
输出样例:
5
作者
严华云
单位
湖州师范学院
代码长度限制
16 KB
时间限制
250 ms
内存限制
64 MB
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n,x;
int left, right, mid;
cin >> n >> x;
int a[n+1];
for (int i = 1; i <= n;i++){
scanf("%d",&a[i]);
}
left = 1;
right = n;
while(left+1<right){
mid = (left + right) / 2;
if(a[mid]>x)
right = mid;
else
left = mid;
}
if(fabs(a[left]-x)<=fabs(a[right]-x))
cout << a[left] << endl;
else
cout << a[right] << endl;
return 0;
}