c++点点问题实在不会,教一下


问题描述
无聊的龙随手拿起一张纸,随手画了一个坐标系,随手在坐标系里点点点。然后,他关心一个问题,如果用一个水平放置(不会旋转)的正方形来覆盖这些点点点,这个正方形的面积最小为多少呢?

输入格式
第一行一个整数 n,表示点点的数量。

接下来共 n 行,每行 2 个正整数 (a,b)(a,b),表示该一个点到 X 轴距离为 b,到 Y轴距离为 a,为了方便你统计,程序龙只会在X轴的上方,Y轴的右方画点点。

输入数据保证存在一个合法的正方形(面积非零)去覆盖这些点点。

输出格式
一个整数,表示能覆盖所有点点的最小正方形的面积。

输入数据 1
3
1 1
2 1
2 2
输出数据 1
1

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

#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;
}

img

【以下回答由 GPT 生成】

解决方案

我们可以使用以下步骤来解决这个问题:

  1. 首先,读取输入的点的数量n。
  2. 创建两个变量,minX和maxY,分别表示X轴的最小距离和Y轴的最大距离。将这两个变量分别初始化为无穷大。
  3. 使用一个循环读取每个点的坐标,并更新minX和maxY的值。在读取每个点时,比较其距离X轴的距离和当前minX的值,如果更小,则更新minX;比较其距离Y轴的距离和当前maxY的值,如果更大,则更新maxY。
  4. 通过计算maxY和minX之间的差值,得到最小正方形的边长。将该值的平方作为最小正方形的面积。
  5. 将最小正方形的面积输出。

下面是具体的实现代码:

#include <iostream>
#include <cmath>
#include <limits>

int main() {
    int n;
    std::cin >> n;

    int minX = std::numeric_limits<int>::max();
    int maxY = std::numeric_limits<int>::min();

    for (int i = 0; i < n; i++) {
        int x, y;
        std::cin >> x >> y;

        minX = std::min(minX, x);
        maxY = std::max(maxY, y);
    }

    int side = std::max(maxY, minX);
    int area = pow(side, 2);

    std::cout << area << std::endl;

    return 0;
}

这样,我们就可以用C++解决这个问题了。



【相关推荐】



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