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

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



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;
                    }

                }
            }
        }
    }
}

思路:
1.定义一个选手类,里面包含选手姓名,选手得分,及评委打分数组,数组大小为评委人数;
2.定义选手类数组,或list集合,把选手得分放到数组里面;
3.对数组进行排序,输出结果。