[关闭]
@yexiaoqi 2022-05-24T11:46:51.000000Z 字数 1600 阅读 489

射击成绩排序

刷题


题目:给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数
请对每个选手按其最高三个分数之和进行降序排名,输出降序排名后的选手id序列
条件如下
1. 一个选手可以有多个射击成绩的分数,且次序不固定
2. 如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名忽略该选手
3. 如果选手的成绩之和相等,则相等的选手按照其id降序排列

难度:*

输入描述:输入第一行,一个整数N,表示该场比赛总共进行了N次射击,产生N个成绩分数,2<=N<=100
输入第二行,一个长度为N整数序列,表示参与每次射击的选手id,0<=id<=99
输入第三行,一个长度为N整数序列,表示参与每次射击选手对应的成绩0<=成绩<=100
输出描述:符合题设条件的降序排名后的选手ID序列

示例一

输入:13
    3,3,7,4,4,4,4,7,7,3,5,5,5
    53,80,68,24,39,76,66,16,100,55,53,80,55
输出:5,3,7,4

说明:该场射击比赛进行了13次,参赛的选手为{3,4,5,7},
3号选手成绩53,80,55 最高三个成绩的和为188
4号选手成绩24,39,76,66 最高三个成绩的和为181
5号选手成绩53,80,55 最高三个成绩的和为188
7号选手成绩68,16,100 最高三个成绩的和为184
比较各个选手最高3个成绩的和,有3号=5号>7号>4号,由于3号和5号成绩相等 且id 5>3,所以输出5,3,7,4

链接http://www.amoscloud.com/?p=3561


  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3. public class Main {
  4. public static void main(String[] args){
  5. Scanner sc = new Scanner(System.in);
  6. while(sc.hasNext()){
  7. int n = sc.nextInt();
  8. String[] id = sc.next().split(",");
  9. String[] score = sc.next().split(",");
  10. Map<Integer, List<Integer>> map = new HashMap<>();
  11. for (int i=0; i<id.length; i++){
  12. int num = Integer.parseInt(id[i]);
  13. List<Integer> list = map.getOrDefault(num, new ArrayList<>());
  14. list.add(Integer.parseInt(score[i]));
  15. map.put(num, list);
  16. }
  17. String s = map.entrySet().stream()
  18. .filter(e -> e.getValue().size() >= 3)//成绩少于3个的作废
  19. .sorted(((e1, e2) -> {
  20. List<Integer> list1 = e1.getValue();
  21. List<Integer> list2 = e2.getValue();
  22. list1.sort(((o1,o2) -> o2-o1));
  23. list2.sort(((o1,o2) -> o2-o1));
  24. Integer sum1 = 0;
  25. Integer sum2 = 0;
  26. for (int i=0; i<3; i++) {
  27. sum1 += list1.get(i);
  28. sum2 += list2.get(i);
  29. }
  30. Integer id1 = e1.getKey();
  31. Integer id2 = e2.getKey();
  32. //如果得分之和相等,按id降序排列
  33. return sum2-sum1==0 ? id2-id1 : sum2-sum1;
  34. }))
  35. .map(o->o.getKey().toString())
  36. .collect(Collectors.joining(","));
  37. System.out.println(s);
  38. }
  39. }
  40. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注