最近点对
时间限制:
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<string.h>
#include<algorithm>
#define maxn 0x3f3f3f3f
using namespace std;
int n,x[1005];
void slove()
{
int min=maxn,l=0,r=0;
for(int i=1;i<n;++i)
{
if(x[i]-x[i-1]<min)//更新
{
min=x[i]-x[i-1];
l=i-1;r=i;//记录
}
}
printf("%d %d\n",x[l],x[r]);//输出
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=0;i<n;++i)
{
scanf("%d",x+i);
}
sort(x,x+n);//排序
slove();
}
return 0;
}