7-5 哪两个点之间的距离最近

设P={(x1​,y1​),(x2​,y2​),⋯,(xn​,yn​)}是平面上散列的n个点的集合。请编写程序找出集合中距离最近的点对。严格地说,相同距离的最近点对可能不止一对,为了简单期间只找出第一对最近点对即可。

输入格式:

输入第一行给出一个正整数n,表示平面上的点数。随后n行,每行给出一个实数对,每个实数对表示一个点的纵横坐标值,其中第1数表示横坐标,第2数表示纵坐标。

输出格式:

输出最近点对中两个点的坐标和它们之间的距离。如果 x1+y1<=x2+y2则按
  (x1,y1),(x2,y2),miniDist=Distance
输出结果,否则按
  (x2,y2),(x1,y1),miniDist=Distance
输出结果。
  其中x1,y1,x2,y2是保留两位小数的实数,Distance是保留3位小数的实数

输入样例:

5
1.00 1.00
2.00 0.00
0.00 2.00
0.50 0.60
-1.00 2.00

输出样例:

(0.50,0.60),(1.00,1.00),miniDist=0.640

代码长度限制

16 KB

时间限制

150 ms

内存限制

64 MB

#include<stdio.h>
#include<math.h>
typedef struct point {
	double x;
	double y;
}point;
double Distance(point a, point b)
{
	double dis;
	dis = sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2));
	return dis;
}
int main()
{
	int n;
	point a[100] = { 0 };
	scanf_s("%d", &n);
	int min1, min2;
	double dis, min;
	for (int i = 0; i < n; i++)
	{
		scanf_s("%lf%lf", &a[i].x, &a[i].y);
	}
	min1 = 0;
	min2 = 1;
	min = Distance(a[min1], a[min2]);
	for (int i = 0; i < n; i++)
	{
		
		for (int j = i + 1; j < n; j++)
		{
			dis = Distance(a[i], a[j]);
			if (dis < min)
			{
				min = dis;
				min1 = i;
				min2 = j;
			}
		}
	}
	if(a[min1].x+a[min1].y<=a[min2].x+a[min2].y)
		printf("(%.2f,%.2f),(%.2f,%.2f),miniDist=%.3f", a[min1].x, a[min1].y, a[min2].x, a[min2].y, min);
	else printf("(%.2f,%.2f),(%.2f,%.2f),miniDist=%.3f", a[min2].x, a[min2].y, a[min1].x, a[min1].y, min);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值