**题目背景:
//代码如下
#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.遍历三次距离数组,每次获取最小距离的大小,再输出其编号,并修改最小距离使其失效。