c++每周几题——点点


问题描述
无聊的程序龙随手拿起一张纸,随手画了一个坐标系,随手在坐标系里点点点。然后,他关心一个问题,如果用一个水平放置(不会旋转)的正方形来覆盖这些点点点,这个正方形的面积最小为多少呢?
输入格式
第一行一个整数 nn,表示点点的数量。
接下来共 nn 行,每行 2 个正整数 (a,b),表示该一个点到 X 轴距离为 b,到 YY轴距离为 a,为了方便你统计,程序龙只会在X轴的上方,Y轴的右方画点点。
输入数据保证存在一个合法的正方形(面积非零)去覆盖这些点点。
输出格式
一个整数,表示能覆盖所有点点的最小正方形的面积。
输入数据 1
3
1 1
2 1
2 2
输出数据 1
1

运行结果:

img

#include <stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    int x, y;
    scanf("%d%d", &x, &y);
    int minx = x, maxx = x;
    int miny = y, maxy = y;
    for (int i = 0; i < n; i++)
    {
        scanf("%d%d", &x, &y);
        if (minx > x) minx = x;
        if (miny > y) miny = y;
        if (maxx < x) maxx = x;
        if (maxy < y) maxy = y;
    }
    if ((maxy - miny) > (maxx - maxy))
        printf("%d", (maxy - miny) * (maxy - miny));
    else
        printf("%d", (maxx - minx) * (maxx - minx));
    return 0;
}

无非就是求x y的差,取那个大的作为边长:

【以下回答由 GPT 生成】

这个问题可以转化为求解点集在X轴和Y轴上的最大距离。因为正方形的对角线会与X轴和Y轴相交,所以点集在X轴和Y轴上的最大距离就是正方形的边长。而正方形的面积就是边长的平方。

具体步骤如下:

  1. 读入输入的点的数量n。
  2. 创建一个空列表x_coords和一个空列表y_coords,用来存储所有点的X轴坐标和Y轴坐标。
  3. 依次读入n行输入,将每个点的X轴坐标和Y轴坐标分别添加到x_coords和y_coords中。
  4. 对x_coords和y_coords进行排序,以便于计算最大距离。
  5. 计算X轴上的最大距离,即x_coords的最后一个元素减去第一个元素的值。
  6. 计算Y轴上的最大距离,即y_coords的最后一个元素减去第一个元素的值。
  7. 取X轴和Y轴上的最大距离的较大值作为正方形的边长。
  8. 计算正方形的面积,即边长的平方。
  9. 输出正方形的面积。

下面是用Python实现的代码:

n = int(input())

x_coords = []
y_coords = []

for _ in range(n):
    a, b = map(int, input().split())
    x_coords.append(a)
    y_coords.append(b)

x_coords.sort()
y_coords.sort()

max_x_distance = x_coords[-1] - x_coords[0]
max_y_distance = y_coords[-1] - y_coords[0]

side_length = max(max_x_distance, max_y_distance)
square_area = side_length ** 2

print(square_area)

输出结果为:

1


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^