PAT乙级(1082 射击比赛)C语言

文章目录

1082 射击比赛输入格式输出格式输入样例输出样例代码示例

1082 射击比赛

本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军;谁差得最远,谁就是菜鸟。本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟。我们假设靶心在原点(0,0)。

输入格式

输入在第一行中给出一个正整数 N(≤ 10 000)。随后 N 行,每行按下列格式给出:

ID x y 其中 ID 是运动员的编号(由 4 位数字组成);x 和 y 是其打出的弹洞的平面坐标(x,y),均为整数,且 0 ≤|x|, |y| ≤ 100。题目保证每个运动员的编号不重复,且每人只打 1 枪。

输出格式

输出冠军和菜鸟的编号,中间空 1 格。题目保证他们是唯一的。

输入样例

3

0001 5 7

1020 -1 3

0233 0 -1

输出样例

0233 0001

代码示例

#include

#include

#include

#include

#include

int main() {

// 定义变量n,用于存储输入的数量

int n;

// 从标准输入读取一个整数赋值给n

scanf("%d", &n);

// 定义一个二维字符数组a,用于存储字符串,每个字符串的最大长度为5(包括字符串结束符'\0'),有n+1个字符串空间

char a[n + 1][5];

// 定义一个整型数组x,长度为n+1,用于存储整数,并初始化为0

int x[n + 1] = {0};

// 定义一个整型数组y,长度为n+1,用于存储整数,并初始化为0

int y[n + 1] = {0};

// 循环n次,用于输入n组数据

for (int i = 0; i < n; i++) {

// 从标准输入读取一个字符串赋值给a[i],读取一个整数赋值给x[i],读取一个整数赋值给y[i]

scanf("%s %d %d", a[i], &x[i], &y[i]);

}

// 初始化变量max为-1,用于记录最大的平方和

int max = -1;

// 初始化变量min为200001,用于记录最小的平方和

int min = 200001;

// 初始化变量maxflag为-1,用于记录最大平方和对应的数组下标

int maxflag = -1;

// 初始化变量minflag为-1,用于记录最小平方和对应的数组下标

int minflag = -1;

// 循环n次,用于遍历每一组数据并计算平方和,比较大小

for (int i = 0; i < n; i++) {

// 计算x[i]的绝对值并赋值给b

int b = abs(x[i]);

// 计算y[i]的绝对值并赋值给c

int c = abs(y[i]);

// 计算b的平方加上c的平方并赋值给d,即计算当前点到原点距离的平方

int d = b * b + c * c;

// 如果d大于max,则更新max的值为d,并记录当前下标i到maxflag

if (d > max) {

max = d;

maxflag = i;

}

// 如果d小于min,则更新min的值为d,并记录当前下标i到minflag

if (d < min) {

min = d;

minflag = i;

}

}

// 输出最小平方和对应的字符串和最大平方和对应的字符串

printf("%s %s", a[minflag], a[maxflag]);

return 0;

}