力不竭!!!战不止!!! 2021-07-26 23:41 采纳率: 100%
浏览 284
已结题

java笔试题比赛选手得分问题

一个有n个选手的比赛,选手编号为(3<=n<=100),有m(3<=m<=10)个评委对选手进行打分。打分规则则为,评委给最高分10,最低分1。
请计算得分最多的3位选手的编号,如果得分相同,则得高分值的个数最多的靠前(得10分数量相同,则比较得9分数量,以此类推,用例中不会出现多个选手得分完全相同的情况)
写出伪代码

  • 写回答

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;
                        }
    
                    }
                }
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月2日
  • 已采纳回答 7月28日
  • 修改了问题 7月27日
  • 创建了问题 7月26日

悬赏问题

  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果