C++ 计算五个点中距离最近的两点

问题描述: 输入五个点的坐标(float型),输出哪两个点之间的距离最近。

输入格式: float型五个点的坐标,以空格分隔。

输出格式: 最近的两个点坐标及距离,格式为:'点(x1, y1)和点(x2, y2)的距离最近,距离为 d'。

样例输入:

1.5 3 4 2.5 2 1 3 1.5 6 5

样例输出:

'点(2,1)和点(3,1.5)的距离最近,距离为 1.12'

思路: 枚举每一对点,计算距离,取最小值即可。

代码如下:

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    float x[5], y[5];
    for (int i = 0; i < 5; i++) {
        cin >> x[i] >> y[i];
    }
    
    int min_i = 0, min_j = 1;
    float min_dist = sqrt(pow(x[0] - x[1], 2) + pow(y[0] - y[1], 2));
    for (int i = 0; i < 5; i++) {
        for (int j = i + 1; j < 5; j++) {
            float dist = sqrt(pow(x[i] - x[j], 2) + pow(y[i] - y[j], 2));
            if (dist < min_dist) {
                min_dist = dist;
                min_i = i;
                min_j = j;
            }
        }
    }
    cout << "点(" << x[min_i] << ',' << y[min_i] << ")和点(" << x[min_j] << ',' << y[min_j] << ")的距离最近,距离为 " << min_dist << endl;
    return 0;
}

代码解释:

  1. 首先读取五个点的坐标并存储在数组 xy 中。
  2. 初始化 min_i, min_jmin_dist,分别代表距离最近的两个点的索引和它们之间的距离。
  3. 使用两层循环遍历所有点对,计算每对点的距离并与 min_dist 比较,更新 min_i, min_jmin_dist
  4. 最后输出距离最近的两个点的坐标和距离。

原文地址: https://www.cveoy.top/t/topic/os8J 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录