PTA 射击比赛(java)

本文介绍了一种算法,用于确定射击比赛中成绩最优与最差的选手。通过计算各选手弹洞距离靶心的距离,算法能准确判断出冠军与菜鸟。输入包含选手编号及弹洞坐标,输出为成绩最佳与最差的选手编号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

样例解答:

最后一个点超时了,查阅一番后也没有找到AC的方法。。。。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
 public static void main(String[] args) throws IOException {
  BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
  int n = Integer.parseInt(bf.readLine());
  String max_id="",min_id="";
  int max_dis=-1,min_dis=100000005;
  for(int i=0;i<n;i++) {
   String[] s = bf.readLine().split(" ");
   int x = Integer.parseInt(s[1]);
   int y = Integer.parseInt(s[2]);
   int sum = x*x+y*y;
   if(sum<min_dis) {
    min_dis = sum;
    min_id = s[0];
   }
   if(sum>max_dis) {
    max_dis = sum;
    max_id = s[0];
   }
  }
  System.out.print(min_id+" "+max_id);
 }
}
### PTA天梯赛Java编程题解及资源 针对PTA天梯赛中的Java编程题目,可以找到多种类型的练习和学习资料来帮助准备比赛。对于特定的题目要求,如顺序读取不同类型的数据并按指定格式输出[^1]: ```java import java.util.Scanner; public class DataReorder { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double floatNum1 = scanner.nextDouble(); int integer = scanner.nextInt(); char character = (char)scanner.next().charAt(0); double floatNum2 = scanner.nextDouble(); System.out.println(character + " " + integer + " " + floatNum1 + " " + floatNum2); scanner.close(); } } ``` 此代码片段展示了如何实现输入四个不同数据类型(两个浮点数、一个整数和一个字符),然后按照新的顺序打印这些数值。 关于时间复杂度和空间复杂度的要求,在某些情况下会有严格的限制,比如最大允许的时间为400毫秒,内存上限为64MB,以及源码大小不超过16KB等条件[^2]。这表明编写高效简洁的算法非常重要。 另外还有其他类型的逻辑运算问题,例如通过循环结构寻找满足多个同余方程式的最小正整数解决方案[^3];或者处理涉及级数求和的任务,其中需要考虑精度控制以达到预期的结果[^4]。 为了更好地应对这类竞赛,建议多做历年的真题训练,并关注官方发布的指南文档和其他参赛者的经验分享文章。同时利用在线平台上的讨论区交流心得也是很有益处的方式之一。 #### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值