**题目背景:
//代码如下
#include<iostream>
using namespace std;
int arr[2001]={0};
int dis[1001]={0};
int main(void)
{
int n,x,y;
scanf("%d%d%d",&n,&x,&y);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&arr[i],&arr[i+1000]);
}
for(int i=1;i<=n;i++)
{
dis[i]=(arr[i]-x)*(arr[i]-x)+(arr[i+1000]-y)*(arr[i+1000]-y);
}
for(int i=1;i<=3;i++)//要三个输出,所以循环三次
{
int min=1000000;
for(int j=1;j<=n;j++)
{
if(min>dis[j])
min=dis[j];
}
for(int k=1;k<=n;k++)
{
if(dis[k]==min)
{
printf("%d\n",k);//输出的是编号
dis[k]=1000000;
break;//退出当前循环
}
}
}
return 0;
}
题目分析:
1.分别将数据处理为距离,存放在数组中。
2.遍历三次距离数组,每次获取最小距离的大小,再输出其编号,并修改最小距离使其失效。