谢谢帮助,请问能不能指出错误,谢谢!!
#include<stdio.h>
#include<math.h>
int BinSearch(long num[],long x,int n)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=low+(high-low)/2;
if(x>num[mid])
low=mid+1;
else if(x<num[mid])
high=mid-1;
else
return mid;
}
return low;
}
int main()
{
int n,m,i;
long a[1000010],b[10010],c[10010];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",b[i]);
c[i]=BinSearch(a,b[i],n);
}
for(i=0;i<m;i++)
printf("%ld",c[i]);
return 0;
}
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int BinSearch(long* num, long x, int n)
{
int low, mid;
if (num[0] - x > 0) {
low = num[0] - x;
}
else {
low = x - num[0];
}
for (int i = 0; i < n; i++)
{
if (num[i] - x > 0) {
if (low > (num[i] - x))
{
low = num[i] - x;
mid = num[i];
}
}
else
{
if (low > (x - num[i]))
{
low = x - num[i];
mid = num[i];
}
}
}
return mid;
}
int main()
{
int n, m, i;
long* a = (long*)malloc(sizeof(long) * 1000010);
long b[10010], c[10010];
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &m);
for (i = 0; i < m; i++)
{
scanf("%d", &b[i]);
c[i] = BinSearch(a, b[i], n);
}
for (i = 0; i < m; i++)
printf("%ld\n", c[i]);
return 0;
}
描述:
在一个非降序列中,查找与给定值最接近的元素。
输入:
第一行包含一个整数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