最近点对
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
0
-
描述
-
给出n个自然数,求出2个数绝对值之差最小的2个数,如果有多个满足要求,请输出其和最小的那对
-
输入
-
有多组测试数据
第一行一个整数n (2 <= n <= 1000).
第二行是n个自然数的值
输出
-
输出最近的那2个数即可(递增输出)。
样例输入
-
4 1 3 7 9 4 0 3 0 2
样例输出
-
1 3 0 0
上传者
-
有多组测试数据
#include<stdio.h>
#include<math.h>int main()
{
int n,i,j,c,k,t;
int a[1001],b[1001];
while(~scanf("%d",&n))
{
for(i=0; i<n; i++)
scanf("%d",&a[i]);
for(i=0; i<n-1; i++)
for(j=0; j<n-i-1; j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0; i<n-1; i++)
{
b[i]=a[i+1]-a[i];
}
k=b[0];
for(i=1; i<n-1; i++)
{
if(b[i]<k)
{
k=b[i];
c=i;
}
}
if(k==b[0])
printf("%d %d\n",a[0],a[1]);
else printf("%d %d\n",a[c],a[c+1]);
}
return 0;
}