PTA 7-459 胜局排序
分数 10
作者 黄龙军
单位 绍兴文理学院
n个人打乒乓球,好不热闹。已知每人各自胜了几局,请按胜局从多到少排序并输出每个人的胜局数及每个人的排名,若胜局数相同,则排名也相同。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试先输入人数n(不大于10),再输入n个整数(不大于30),表示各人的胜局数。
输出格式:
对于每组测试,输出两行,第一行是各人从多到少排序的胜局数,第二行是各人相应的排名(从1开始)。每行的每两个数据之间留一个空格。
输入样例:
2
6 5 1 2 3 4 6
5 4 5 6 6 4
输出样例:
6 5 4 3 2 1
1 2 3 4 5 6
6 6 5 4 4
1 1 3 4 4
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
int main(){
int T;
scanf("%d", &T);
while(T--){
int n, temp; //n个人, temp临时变量
scanf("%d", &n);
int Grade[n]; //储存胜场
for(int i = 0; i < n; i++){
scanf("%d", &Grade[i]);
}
//排序
for(int i = 0; i < n-1; i++){
for(int j = 0; j < n-1-i; j++){
if(Grade[j] < Grade[j+1]){
temp = Grade[j];
Grade[j] = Grade[j+1];
Grade[j+1] = temp;
}
}
}
//输出胜局数从多到少
for(int i = 0; i < n; i++){
if(i == n-1){
printf("%d\n", Grade[i]);
}else{
printf("%d ", Grade[i]);
}
}
//输出排名
int p = 1, t = 1;
for(int i = 0; i < n; i++){
if(i == 0){ //排名第一
printf("%d ", p);
t++;
}else{
if(Grade[i] == Grade[i-1]){ //胜场数相同
if(i == n-1) //最后一个数据的空格处理
printf("%d\n", p);
else
printf("%d ", p);
t++;
}else{ //胜场数不同
if(i == n-1)
printf("%d\n", t);
else
printf("%d ", t);
p = t; //胜场数相同时先将排名赋值为上一个的排名
t++;
}
}
}
}
return 0;
}
解题思路:
step1:输入数据并按照胜场最多排序
step2:判断胜场数是否一样多,设置两个变量表示相同排名和不相同排名
归属知识点:
数组
循环结构
选择结构