该题比较简单,使用一个结构体保存检测点的编号以及与市民的距离,然后按照题目意思写一个cmp,调用sort,最后数组输出前三个元素即可
tips:对距离可以不用开平方
#include<iostream> #include<algorithm> using namespace std; struct node{ int distance; //距离 int id; //检测点编号 }; bool cmp(node n1,node n2) //自定义sort顺序 { if(n1.distance==n2.distance) //距离一样编号小的排在前面 return n1.id < n2.id; return n1.distance < n2.distance; } int main() { int n,x,y; cin>>n>>x>>y; node point[n]; for(int i=0;i<n;i++) { int point_x,point_y; cin>>point_x>>point_y; point[i].distance = (point_x-x)*(point_x-x) + (point_y-y)*(point_y-y); point[i].id = i+1; } sort(point,point+n,cmp); for(int i=0;i<3;i++) cout<<point[i].id<<endl; return 0; }