zoukankan      html  css  js  c++  java
  • 1082 射击比赛 PAT (Basic Level)

    题目链接:

    https://pintia.cn/problem-sets/994805260223102976/problems/994805260990660608

    1082 射击比赛 (20 分)
    本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军;谁差得最远,谁就是菜鸟。本题给出一系列弹洞的平面坐标(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
    结尾无空行

    分析:

    这是典型的给出编号和得分然后输出最高分和最低分的题目,只不过得分要通过x和y计算得到。

    本人利用字符数组存放运动员的编号,这样具有通用性,但是本题保证编号是4位数字,所以也可用整型变量来存,但要考虑输出时的%04d的形式。

    如果采用字符数组,则需要考虑输入字符串和输入整数之间可能存在多余的空白符,可以通过%*c过滤。

    根据平面内两点之间的距离公式可以得到r2=x2+y2,考虑到r2的大小关系可以代表r的大小关系,所以直接计算r2即可,避免使用sqrt()函数。

    AC代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 int main(void)
     5 {
     6     int n=0,x=0,y=0,min=88888,max=-1;
     7     char s[8]="",s1[8]="",s2[8]="";
     8     scanf("%d",&n);
     9     while(n--)
    10     {
    11         scanf("%*c%s%d%d",s,&x,&y);
    12         x=x*x+y*y;
    13         if(x<min)
    14             min=x,strcpy(s1,s);
    15         if(x>max)
    16             max=x,strcpy(s2,s);
    17     }
    18     printf("%s %s",s1,s2);
    19     return 0;
    20 }
  • 相关阅读:
    【bzoj2820】GCD
    【learning】莫比乌斯反演
    【bzoj2151】种树
    【noip模拟】局部最小值
    【learning】多项式乘法&fft
    【learning】二分图最大匹配的König定理
    【noip模拟】2048
    【noip模拟】修长城
    【noip模拟】最小点覆盖
    【noip模拟】Fantasia
  • 原文地址:https://www.cnblogs.com/leisureeen/p/11421272.html
Copyright © 2011-2022 走看看