一个有n个选手的比赛,选手编号为(3<=n<=100),有m(3<=m<=10)个评委对选手进行打分。打分规则则为,评委给最高分10,最低分1。
请计算得分最多的3位选手的编号,如果得分相同,则得高分值的个数最多的靠前(得10分数量相同,则比较得9分数量,以此类推,用例中不会出现多个选手得分完全相同的情况)
写出伪代码
java笔试题比赛选手得分问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 游梦fhc 2021-07-28 15:24关注
public class 类名 { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 获取选手 n 和评委 m 的个数 类型 n = Integer.parseInt(input.next()); 类型 m = Integer.parseInt(input.next()); // 存储前3选手被每个评委的评分,第4个当成最后一名选手,来对比排序 类型[][] narray = new 类型[4][12]; // 因为评委要给选手评分,所以我们要遍历选手并给评分 // 0 选手编号 // 1 - 10 分数数量 // 11 选手 for (int i = 0; i < n; i++) {//遍历选手 // 评委评分 // 把第四选手的评分清空 for (int j = 0; j < 12; j++) { narray[3][j] = 0; } // 评委评分 for (int j = 0; j < m; j++) { 类型 临时存储 = Integer.valueOf(input.next()); // 记录总分数 narray[3][11] += 临时存储; // 记录选手的相同分数的个数 narray[3][临时存储]++; } // 保存选手 narray[3][0] = i + 1; // 每次评分后就进行,选手排名 sort(narray); } for (int i = 0; i < 3; i++) {//遍历前三的选手 System.out.println(narray[i][0]); } } // 进行排序,选择出前三的选手 public static void sort(类型[][] narray) { /* 有两种可能 1.当前选手分数大于前三 2.当前选手分数等于前三 */ // 循环排序前四名 for (int j = 0; j < 3; j++) { /* 当前选手分数大于前三时,有两种可能 1.比赛刚刚开始,前三还没有出来 2.前三已经出来了,就要进行排序 */ if (narray[j][11] < narray[3][11]) { // 当前选手的总分大于 前三的,进行排名对换f 类型 临时替换= narray[3][0]; narray[3][0] = narray[j][0]; narray[j][0] = 临时替换; // 并换取总分和分数个数 for (int l = 11; l > 0; l--) { 临时替换= narray[3][l]; narray[3][l] = narray[j][l]; narray[j][l] = 临时替换; } // 前三还没有出来,所以进行退出,不必进行比下去了 if (narray[3][0] == 0) break; } else if (narray[j][11] == narray[3][11]) {//2.当前选手分数等于前三 for (int k = 10; k > 0; k--) { /*选手的总分数等于前三的选手,有三种可能 1. 选手的最大分数多于前三 2. 选手的等于前三的 3. 选手的最大分数少于前三的 */ if (narray[j][k] < narray[3][k]) {//选手的最大分数多于前三 类型 临时替换= narray[3][0]; narray[3][0] = narray[j][0]; narray[j][0] = 临时替换; for (int l = k; l > 0; l--) { 临时替换= narray[3][l]; narray[3][l] = narray[j][l]; narray[j][l] = 临时替换; } break; } else if (narray[j][k] > narray[3][k]) {//选手的最大分数少于前三的 break; } } } } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用 1