PTA 7-459 胜局排序

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:判断胜场数是否一样多,设置两个变量表示相同排名和不相同排名

归属知识点:
数组
循环结构
选择结构

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值