解题思路:输入,二分法
注意事项:low+1
参考代码:
#include<stdio.h>
int main()
{
int n,a[100000],b[100000],i,k,high,low,mid;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
if(i<n-1)
scanf("%d ",&a[i]);
else if(i==n-1)
scanf("%d\n",&a[i]);
}
scanf("%d\n",&k);
for(i=0;i<k;i++)
{
scanf("%d\n",&b[i]);//输入到此为止
if(b[i]<=a[0])
{
printf("%d\n",a[0]);//如果所要查找的数不在序列之内
}
else if(b[i]>=a[n-1])
{
printf("%d\n",a[n-1]);
}
else//在序列之内,采用二分法查找
{
high=n;
low=0;
while(low<high)
{
mid=(low+high)/2;
if(b[i]>a[mid])
low=mid+1;//为什么最小的要加1
else
high=mid;
}
int ans=high;//找到最近的那个数
if(a[ans]-b[i]<b[i]-a[ans-1])
printf("%d\n",a[ans]);
else//包括了等于和小于,等于的时候也是输出排序小的那个
printf("%d\n",a[ans-1]);
}
}
return 0;
}
0.0分
4 人评分
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:588 |
C语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:875 |
Tom数 (C++代码)浏览:868 |
九宫重排 (C++代码)浏览:1410 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:781 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:1314 |
WU-图形输出 (C++代码)浏览:836 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |
简单的a+b (C语言代码)浏览:878 |
printf基础练习2 (C语言代码)浏览:796 |