非常非常简单的题,只要你会任意一种排序,而且排序算法都不用自己写的那种,然后懂一点结构体的知识或者STL的知识就行了,直接上代码吧。
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
struct point
{
int x,y;
int num;//序号
int d;
};
bool cmp(point p1,point p2)
{
if(p1.d==p2.d) return p1.num<p2.num;
else
return p1.d<p2.d;
}
int main()
{
point p[210];
int n,X,Y;
cin>>n>>X>>Y;
for(int i=0;i<n;i++)
{
cin>>p[i].x>>p[i].y;
p[i].num=i;
p[i].d=((X-p[i].x)*(X-p[i].x)+(Y-p[i].y)*(Y-p[i].y));
}
sort(p,p+n,cmp);
/*for(int i=0;i<n;i++)
{
cout<<i<<" "<<p[i].d<<" "<<p[i].num<<endl;
}*/
for(int i=0;i<3;i++) cout<<p[i].num+1<<endl;
return 0;
}
有个地方我很傻就是当两个点的距离相等时,序号小的排在前面,这里我过分依靠了sort函数,但其实他并没有给你像那样默认排好,需要自己在写的cmp函数中再加上一段此种情况的判断语句,这样才算是完成了,之前一直是60分,就是因为这个地方浪费了好多时间,小伙伴可以定要注意啊!不过奇怪的是,我看了另外一个博主的代码却完美的100分过去了,也没弄清楚之中的原理,有兴趣的小伙伴看看,求大佬指出来。链接附上https://blog.csdn.net/qq_43337263/article/details/108889084