CSP第20次 202009-1 称检测点查询 C语言满分答案
各位一定一定要记得有小数点的运算要设置变量为浮点数类型!!!
(我中了好多次坑了)
感觉以前代码质量不好,重写了下
#include <stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct st
{
int id;
double value;
}arr[210];
bool cmp(st a,st b)
{
if(a.value!=b.value)
return a.value<b.value;
else return a.id<b.id;
}
int main()
{
int i,n,j,X,Y,x,y;
scanf("%d %d %d",&n,&X,&Y);
for(i=0;i<n;i++)
{
scanf("%d %d",&x,&y);
arr[i].value=sqrt(pow(X-x,2.0)+pow(Y-y,2.0));
arr[i].id=i;
}
sort(arr,arr+n,cmp);
printf("%d\n%d\n%d",++arr[0].id,++arr[1].id,++arr[2].id);
return 0;
}
以前写的
#include <stdio.h>
#include <math.h>
main()
{
int n,X,Y;
int i,j,k;
scanf("%d %d %d",&n,&X,&Y);
int arr[n][2];
double arr_value[n];
double out_value[3];
int out[3];
for(i=0;i<n;i++)
{
scanf("%d",&arr[i][0]);
scanf("%d",&arr[i][1]);
arr_value[i] = sqrt((arr[i][0]-X)*(arr[i][0]-X)+(arr[i][1]-Y)*(arr[i][1]-Y));//改成勾股定理
}
for(i=0;i<3;i++)
{
out_value[i]=1000;
for(j=0;j<n;j++)
{
if(arr_value[j]<out_value[i])
{
out_value[i]=arr_value[j];
out[i]=j;
}else if(arr_value[j]==out_value[i])
{
if(j<out[i])
{
out_value[i]=arr_value[j];
out[i]=j;
}
}
}
arr_value[out[i]]=1000;
}
for(i=0;i<3;i++)
{
printf("%d\n",out[i]+1);
}
return 0;
}