二分法之查找最接近目标数的数

来源:互联网 发布:盘点2016网络流行语 编辑:程序博客网 时间:2024/06/15 01:39
/*Name: 查找最接近目标数的数 Author: 巧若拙 Description: 描述给定大小为n的有序数组A,输入一个数key,在数组A中查找最接近key的元素(当最接近的数有2个时,输出值较大的一个) 输入第一行是两个整数n和key。第二行是用空格隔开的n个整数 输出最接近的元素值 样例输入5 41 3 5 7 9样例输出5*/#include<iostream>  #include<cstdio>  #include<cstdlib>    using namespace std;    const int MAXN = 1000;  int A[MAXN];    int main()   {  int n, key;    cin >> n >> key;      for (int i=0; i<n; i++)          cin >> A[i];          if (key <= A[0])    cout << A[0] << endl;    else if (key >= A[n-1])    cout << A[n-1] << endl;else{int mid, left = 0, right = n;     while (left <= right)      {          mid = (left + right) / 2;          if (key > A[mid])                left = mid + 1;          else              right = mid - 1;      }      if (A[left]-key <= key-A[right])//当最接近的数有2个时,输出值较大的一个    cout << A[left] << endl;    else    cout << A[right] << endl; }         return 0;  }  

原创粉丝点击