zoukankan      html  css  js  c++  java
  • Openjudge1.11.1 查找最接近的元素

    【描述】
        在一个非降序列中,查找与给定值最接近的元素。

    【输入】
        第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。
        第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。
        第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。
        接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。

    【输出】
        m行,每行一个整数,为最接近相应给定值的元素值,保持输入顺序。若有多个值满足条件,输出最小的一个。

    【样例输入】
        3
        2 5 8
        2
        10
        5

    【样例输出】
        8
        5

    【题目分析】
    板子题。

    【代码实现】

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 long a[100001];
     5 long m;
     6 long k;
     7 void binarysearch(long long w)
     8 {
     9     int left=1;
    10     int right=n,mid;
    11     while(right>left+1)
    12     {
    13         mid=left+(right-left)/2;//第一遍写成left-right了 
    14         if(a[mid]<w)
    15         {
    16             left=mid;
    17         }else 
    18         {
    19             right=mid; 
    20         }
    21     }
    22     if(abs(a[left]-w)<=abs(a[left+1]-w)){
    23         cout<<a[left]<<endl;
    24     }else{
    25         cout<<a[left+1]<<endl;
    26     }
    27 }
    28 int main()
    29 {
    30     long m;
    31     long k;
    32     scanf("%d",&n);
    33     for(int i=1;i<=n;i++)
    34     {
    35         scanf("%d",&a[i]);
    36     }
    37     scanf("%d",&m);
    38     for(int i=1;i<=m;i++)
    39     {
    40         scanf("%d",&k);
    41         if(n==1){
    42             printf("%d
    ",a[1]);//这里记得换行,不然会Presentation Error
    43         }else{
    44             binarysearch(k);
    45         }
    46         
    47     }
    48 
    49     return 0;
    50 }
  • 相关阅读:
    matlab curve fitting tool
    simulink model configuration parameter
    MATLAB小知识
    电源噪声与纹波
    各种“地”—— 各种“GND”
    一个不错的充电方案论坛:
    pre -regulator 前端稳压器
    LT4020替代方案
    power delivery功率输出
    LTC4020锂电池充电模块开发记录
  • 原文地址:https://www.cnblogs.com/TheZealous/p/14529616.html
Copyright © 2011-2022 走看看