7-6 进步排行榜 (10 分)

该博客介绍了一段Java代码,用于处理编程竞赛中学生的解题进步排行榜。程序首先读取学生数据,包括用户名、进步总数和解题总数,然后根据这些数据进行排序。排序依据是进步总数降序,如果进步总数相同,则按解题总数降序,最后如果两者都相同,则按用户名升序排列。输出的排行榜展示了每个学生的排名、用户名、进步总数和解题总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7-6 进步排行榜 (10 分)
假设每个学生信息包括“用户名”、“进步总数”和“解题总数”。解题进步排行榜中,按“进步总数”及“解题总数”生成排行榜。要求先输入n个学生的信息;然后按“进步总数”降序排列;若“进步总数”相同,则按“解题总数”降序排列;若“进步总数”和“解题总数”都相同,则排名相同,但输出信息时按“用户名”升序排列。

输入格式:
首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入一个正整数n(1 < n < 50),表示学生总数。然后输入n行,每行包括一个不含空格的字符串s(不超过8位)和2个正整数d和t,分别表示用户名、进步总数和解题总数。

输出格式:
对于每组测试,输出最终排名。每行一个学生的信息,分别是排名、用户名、进步总数和解题总数。每行的各个数据之间留一个空格。注意,进步总数和解题总数都相同的学生其排名也相同。

输入样例:

1
6
usx15131 21 124
usx15101 27 191
usx15113 31 124
usx15136 18 199
usx15117 27 251
usx15118 21 124

输出样例:

1 usx15113 31 124
2 usx15117 27 251
3 usx15101 27 191
4 usx15118 21 124
4 usx15131 21 124
6 usx15136 18 199


import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T  =scanner.nextInt();
        for (int w =0;w<T;w++){
            int n =scanner.nextInt();
            scanner.nextLine();//吃回车
            String name [] = new String[n];
            int improve [] = new int[n];
            int solve []= new int[n];
            //存数据
            for(int i =0;i<n;i++){

                String stings[]  =scanner.nextLine().split(" ");
                name[i] = String.valueOf(stings[0]);
                improve[i] = Integer.parseInt(stings[1]);
                solve[i] = Integer.parseInt(stings[2]);
            }
            for(int i =0;i<n;i++){
                for(int j =0 ;j < n - i - 1;j++){
                    if(improve[j] < improve[j+1] ){
                        int tem = improve[j+1];
                        improve[j+1] = improve[j];
                        improve[j] = tem;

                        int te = solve[j+1];
                        solve[j+1] = solve[j];
                        solve[j] = te;

                        String st = String.valueOf(name[j+1] );
                        name[j+1] = String.valueOf(name[j]);
                        name[j] = String.valueOf(st);
                    }
                    if(improve[j] == improve[j+1]){
                        if(solve[j] < solve[j+1]){
                            int tem = improve[j+1];
                            improve[j+1] = improve[j];
                            improve[j] = tem;

                            int te = solve[j+1];
                            solve[j+1] = solve[j];
                            solve[j] = te;

                            String st = String.valueOf(name[j+1] );
                            name[j+1] = String.valueOf(name[j]);
                            name[j] = String.valueOf(st);
                        }
                        if(solve[j] == solve[j+1]){
                            if(name[j].compareTo(name[j+1]) > 0){
                                int tem = improve[j+1];
                                improve[j+1] = improve[j];
                                improve[j] = tem;

                                int te = solve[j+1];
                                solve[j+1] = solve[j];
                                solve[j] = te;

                                String st = String.valueOf(name[j+1] );
                                name[j+1] = String.valueOf(name[j]);
                                name[j] = String.valueOf(st);
                            }
                        }
                    }
                }
            }
            int i = 0;
            while (i<n) {

                int num1 = improve[i];
                int num2 = solve[i];
                int cur = i ;
                System.out.println(i+1+" " + name[i]+" "+improve[i]+" "+solve[i]);
                while (i + 1 < n) {
                    if (num1 == improve[i +1]  && num2 == solve[i+1]) {
                        System.out.println(cur+1+" " + name[i + 1]+" "+improve[i+1]+" "+solve[i+1]);
                        i++;

                    } else {
                        break;
                    }
                }
                i++;
               
            }
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超好的小白

没体验过打赏,能让我体验一次吗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值