【问题描述】在选美大奖赛的半决赛现场,有n名选手(2<n<100)参加比赛。比赛结束时,要在现场按照选手的出场顺序宣布最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。如: </div> <div> 选手数量: 7 选手得分: 5,3,4,7,3,5,6宣布名次: 3,5,4,1,5,3,2 请编程帮助大奖赛组委会完成半决赛的评分排名工作。
【输入形式】选手数量:7 选手得分:5;3;4;7;3;5;6
【输出形式】选手的排名:3 5 4 1 5 3 2
【样例输入】7 5 3 4 7 3 5 6
【样例输出】3 5 4 1 5 3 2
解题分析:建立两个相同的数组,arr[n]用来储存得分,copy_arr[n]用来去重,出现相同的得分,则令其中一个为0。
再将arr[n]逐个与copy_arr[n]进行比较,得出排名。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
int[] copy_arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
copy_arr[i] = arr[i];
}
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (copy_arr[i] == copy_arr[j]) {
copy_arr[j] = 0;
}
}
}
for (int i = 0; i < n; i++) {
int num = 1;
for (int j = 0; j < n; j++) {
if (arr[i] < copy_arr[j])
num++;
}
System.out.print(num + " ");
}
}
}