比赛

作者: 何以解君愁 | 来源:发表于2025-11-03 13:41 被阅读0次

 一个有N个选手参加比赛,选手编号为1~N(3<=N<=100),有M(3<=M<=10)个评委对选手进行打分。
 打分规则为每个评委对选手打分,最高分10分,最低分1分。
 请计算得分最多的3位选手的编号。
 如果得分相同,则得分高分值最多的选手排名靠前
 (10分数量相同,则比较9分的数量,以此类推,用例中不会出现多个选手得分完全相同的情况)。
 输入描述:第一行为半角逗号分割的两个正整数,第一个数字表示M(3<=M<=10)个评委,第二个数字表示N(3<=N<=100)个选手。第2到M+1行是半角逗号分割的整数序列,表示评委为每个选手的打分,0号下标数字表示1号选手分数,1号下标数字表示2号选手分数,依次类推。
 输出描述:选手前3名的编号。
 注:若输入为异常,输出-1,如M、N、打分不在范围内。

import java.util.*;


public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String[] temp = sc.nextLine().split("[,]");
        //m个评委,n个选手
        int m = Integer.parseInt(temp[0]);
        int n = Integer.parseInt(temp[1]);
        
        //接收选手
        //+2,嵌入选手id以及总成绩,m个评委,n个选手
        //n个选择,int[][] id 总分 单项成绩(m个评委)
        int[][] mn = new int[n][m + 2];
        int[] sums = new int[n];
        for(int i = 0;i < m;i++){
            //,切割获取结果
            //第一个人的第一个成绩,第二个人的第一个......
            //n行
            String sm = sc.nextLine();
            if(sm.isEmpty()||m < 3||n < 3){
                System.out.print("-1");
                return;
            }
            String[] s = sm.split("[,]");
            for(int j = 0;j < n;j++){
                if(Integer.parseInt(s[j]) > 10||Integer.parseInt(s[j]) < 0){
                    System.out.print("-1");
                    return;
                }
                //接收第几个参数
                mn[j][i + 2] = Integer.parseInt(s[j]);
                //0 1 2
                sums[j] += Integer.parseInt(s[j]);
            } 
        }

        for(int i = 0;i <sums.length;i++){
            mn[i][0] = i;
            mn[i][1] = sums[i]; 
//             System.out.print(mn[i][0] + " ");
//             System.out.print(mn[i][1] + " ");
//             System.out.print(mn[i][2] + " ");
        }
        
        Arrays.sort(mn, (a, b) -> {
            if (a[1] != b[1]) {
                return b[1] - a[1]; // 首先按总分降序
            } else {
                // 从最高分开始逐级比较
                for (int scoreLevel = 10; scoreLevel >= 0; scoreLevel--) {
                    int countA = 0;
                    int countB = 0;
            
                    // 统计当前分数级别出现的次数
                    for (int i = 2; i < m + 2; i++) {
                        if (a[i] == scoreLevel) countA++;
                        if (b[i] == scoreLevel) countB++;
                    }
            
                    // 如果当前级别分数出现次数不同,按次数降序
                    if (countA != countB) {
                        return countB - countA;
                    }
                }
        
                return a[0] - b[0];
            }
        });
        for(int i = 0;i < 3;i++){
            if(i == 2){
                System.out.print(mn[i][0] + 1);
            }else{
                System.out.print((mn[i][0] + 1) + ",");
            }
        }
    }
}

相关文章

  • 比赛非比赛

    今天去参加了英语比赛,明知就是骗钱的活动,可是孩子不懂其中原委,可是又不能跟她说的太明白。 去年参加到决赛的同学花...

  • 9月10日

    比赛战况比赛战况田径比赛游泳比赛篮球比赛

  • 前黄坝头中心小学新教师基本功比赛2018.12.08

    粉笔字比赛: 简笔画比赛: 毛笔字比赛: 硬笔字比赛: 师德演讲比赛: 课件制作比赛:

  • 比赛

    上次说过女儿不想参加舞蹈比赛 我和他爸爸也非常尊重她的选择。没有强迫她。结果上星期天回来,她主动跟我说,吴老...

  • 比赛

    2018.5.22 星期二 天气 小雨转晴 凉快 亲子日记第126天 中午和轩轩做口算题比赛,30道题用9...

  • 比赛

    家境、教育环境、父母的格局和能力,使得每个孩子的起点注定不同。退一步说,即便大家起点都一样,决定孩子能跑多快、多远...

  • 比赛

    市首届民乐大赛圆满落幕 文\李伟华 7月29日下午《弘扬国乐•...

  • 比赛

    最近,我们的教练让我们每天下午做完热身运动之后,就开始打比赛,一直打到放学。 一般都是4V4,所以我们经常很多...

  • 比赛

    1、今天我去比赛了,但是有点伤心,因为这么辛苦,一个奖都没达到,打团对品势的时候,有个人拖我们后腿,本来可以打很高...

  • 比赛

    今天早上我从梦中醒来想起今天是拉丁比赛的日子,我就格外的激动,于是我马上就爬起来啦!我先是去别人家化妆,他们在群里...

网友评论

      本文标题:比赛

      本文链接:https://www.haomeiwen.com/subject/ecvmtstx.html