30

代码:

include <stdio.h>

struct Point
{
int x;// 横纵坐标
int y;
long long dis_sq; // 距离平方,long long防止x²/y²溢出
};
int main()
{
int n;
scanf("%d", &n);
struct Point points[10];
for (int i = 0; i < n; i++)
{
int x, y;
scanf("%d %d", &x, &y);
long long dis_sq = (long long)x * x + (long long)y * y;
points[i].x = x;
points[i].y = y;
points[i].dis_sq = dis_sq;
}

for (int i = 0; i < n-1; i++)
{ //冒泡排序
for (int j = 0; j < n-1 - i; j++)
{
if (points[j].dis_sq > points[j+1].dis_sq)
{
struct Point temp = points[j]; // 临时存储前一个点
points[j] = points[j+1]; // 交换后,前面一个点存较小值,后面一个点存较大的
points[j+1] = temp;
}
}
}
for (int i = 0; i < n; i++)
printf("%d %d %lld\n", points[i].x, points[i].y, points[i].dis_sq);

return 0;
}

bug:

收获:用结构体绑定坐标(x,y)和距离平方dis_sq,排序时使三个一起变化;xy的范围平方后1e12,超过int(2e9),所以用long long 存储 dis_sq.先将x和y转换为longlong((long long)x),再相乘避免溢出

posted @ 2025-07-01 18:23  ervgiu28hg34y827  阅读(4)  评论(0)    收藏  举报