PAT 乙级 1082 射击比赛
1. 题目简述及在线测试位置
1.1 计算任意点距离原点(0,0)的距离,打印最短距离和最远距离的点
1.2 在线测试位置: 1082 射击比赛
2. 基本思路
2.1 通过结构体数组存储数据,获得 x y坐标值后,计算其到原点的距离:x2 + y2 (不需要开平方)
#define MAX 10000
struct Info
{
string ID;
int x;
int y;
double Distance;
};
struct Info info[MAX];
2.2 对结构体数组从小到大排序,第一个元素和最后一个元素就是所求值
3. 完整AC代码
#include <algorithm>
#include <iostream>
using namespace std;
#define MAX 10000
struct Info
{
string ID;
int x;
int y;
double Distance;
};
bool Compare(struct Info a, struct Info b)
{
return a.Distance < b.Distance;
}
int main()
{
struct Info info[MAX];
int N;
string ID; int x, y;
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> ID >> x >> y;
info[i].ID = ID;
info[i].x = x;
info[i].y = y;
info[i].Distance = x * x + y * y;
}
sort(info, info+N,Compare);
cout << info[0].ID << " " << info[N - 1].ID;
return 0;
}