1082 射击比赛 (20分)

    技术2024-10-03  57

    题目:

    本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军;谁差得最远,谁就是菜鸟。本题给出一系列弹洞的平面坐标(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<iostream> #include<map> using namespace std; struct Node{ string no; int x; int y; }; int main(){ int N; cin >> N; Node a[N]; int max = -1, min = 20001; int maxin = 0, minin = 0; for(int i=0;i < N;i++){ cin >> a[i].no >> a[i].x >> a[i].y; int score = a[i].x*a[i].x+a[i].y*a[i].y; if(score > max){ maxin = i; max = score; } if(score < min){ minin = i; min = score; } } cout << a[minin].no << " "<< a[maxin].no << endl; return 0; } /* #include<iostream> #include<iomanip> using namespace std; struct Node{ int no; int x; int y; }; int main(){ int N; cin >> N; Node p[N]; int score[N]; for(int i=0;i < N;i++){ cin >> p[i].no >> p[i].x >> p[i].y; score[i] = p[i].x*p[i].x + p[i].y*p[i].y; } int max = 0, min = 100000; int maxi, mini; for(int i=0;i < N;i++){ if(score[i] > max){ max = score[i]; maxi = i; }else if(score[i] < min){ min = score[i]; mini = i; } } //自动填满为4位数 //需要使用#include<iomanip> cout << setfill('0') << setw(4) << p[mini].no << " "; cout << setfill('0') << setw(4) << p[maxi].no << endl; // printf("%4d ", p[mini].no); // printf("%4d", p[maxi].no); } */

     

    Processed: 0.018, SQL: 9