01:查找最接近的元素

本题地址:http://noi.openjudge.cn/ch0111/01/

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

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

输入

第一行包含一个整数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
 2 #include
 3 int main(int argc, char *argv[])
 4 {
 5     int n,i,*a,m,t;
 6     int begin,end,mid;
 7     int x,y;
 8     
 9     scanf("%d",&n);
       //根据输入的n创建动态数组,节省储存空间
10     a=(int *)malloc(n*sizeof(int));
11     for(i=0;it) { printf("%d\n",a[0]); continue;}
           //如果目标值比最后一个值还要大,那么最后一个肯定是最接近目标值的的数字
18         else if(a[n-1]1)
24         {
25             if(a[mid]==t) { printf("%d\n",a[mid]);break;}
26             else 
27             {
28                 if(a[mid]>t)
29                 {
30                     end=mid-1;
31                 }
32                 else 
33                 {
34                     begin=mid+1;
35                 }
36             }
37             mid=(begin+end)/2;
38         }

           //退出循环的情况,寻找相对来说最接近目标值的数字
39         if(a[mid]!=t)
40         {
41             x=abs(a[begin]-t);
42             y=abs(a[end]-t);
43             if(xy) printf("%d\n",a[end]);
45             else printf("%d\n",(a[begin] 
  

原文链接:https://www.cnblogs.com/huashanqingzhu/p/6882821.html

你可能感兴趣的:(分治法)