用js解答:一个有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、打分不在范围内。
时间: 2024-02-18 20:06:05 浏览: 97
以下是使用 JavaScript 的解法:
```javascript
// 读取输入
const input = readline().split(',');
const M = parseInt(input[0]);
const N = parseInt(input[1]);
const scores = [];
for (let i = 0; i < M; i++) {
scores.push(readline().split(',').map(score => parseInt(score)));
}
// 计算得分
const players = [];
for (let i = 1; i <= N; i++) {
const player = { id: i, score: 0, counts: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] };
for (let j = 0; j < M; j++) {
const score = scores[j][i - 1];
player.score += score;
player.counts[score - 1]++;
}
players.push(player);
}
// 排序并输出前三名
players.sort((a, b) => {
if (a.score !== b.score) {
return b.score - a.score;
}
for (let i = 9; i >= 0; i--) {
if (a.counts[i] !== b.counts[i]) {
return b.counts[i] - a.counts[i];
}
}
return a.id - b.id;
});
for (let i = 0; i < 3; i++) {
console.log(players[i].id);
}
```
这个解法首先读取输入,然后遍历所有选手,计算他们的得分和各个分数的数量。接着按照题目要求的规则排序选手,并输出前三名的编号。
阅读全文