文章目录
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;
}