【CCF-CSP 2020-9-1 称检测点查询 结构体满分题解-C++】

在这里插入图片描述

代码思路:

首先读入点的个数、给定点的 x 和 y 坐标。接着,循环读入每一个点的坐标,并计算该点到给定点的欧几里得距离。把每个点的下标和它到给定点的距离存储在一个结构体数组中。

之后,对所有点按照到给定点的距离进行排序,若距离相同则按照下标从小到大排序。最后,输出距离最小的前三个点的下标。

代码实现:

#include<iostream> 
#include<algorithm> 
using namespace std;
struct ans { //定义结构体
    int index; //表示点的下标
    double distance; //表示点到给定点的欧几里得距离
};
bool cmp(ans a, ans b) { //比较函数,用于排序
    if (a.distance != b.distance)
        return a.distance < b.distance; //根据距离从小到大排序
    else
        return a.index < b.index; //距离相等时,按下标从小到大排序
}
int main()
{
    int n, x, y; 
    int arr[210][2] = { 0 }; //定义一个二维数组存储多个点
    ans ans[210] = { 0 }; //定义一个结构体数组存储每个点到给定点的距离和它的下标
    double distance = 0; //初始化距离为0
    cin >> n >> x >> y;
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i][0]; //输入第 i 个点的 x 坐标
        cin >> arr[i][1]; //输入第 i 个点的 y 坐标
        distance = pow(arr[i][0] - x, 2) + pow(arr[i][1]-y, 2); //计算第 i 个点到给定点的欧几里得距离
        ans[i].index = i+1; //记录第 i 个点的下标
        ans[i].distance = distance; //记录第 i 个点到给定点的距离
    }
    sort(ans, ans + n, cmp); //对所有点按照距离进行排序
    for (int i = 0; i < 3; i++) //选出距离最小的前三个点
    {
        cout << ans[i].index << endl; 
    }
}
//测试点
//5 0 1
//- 1 0
//0 0
//1 0
//0 2
//- 1 2
//2
//4
//1

注意:当距离相等时要按照序号从小到大排列,否则只能得60昏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Muuuzi丶

您的鼓励是我创作的无限动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值