73 多级排序

本文介绍了一个使用Java实现的C语言成绩排名系统,该系统能够根据学生的C语言、计算机导论和英语成绩进行多级排序,确保成绩优异的学生排名靠前。文章详细描述了输入输出格式,以及如何通过比较总成绩、C语言成绩和计算机导论成绩来实现精确的排序。
摘要由CSDN通过智能技术生成

73 多级排序

作者: zzp时间限制: 1S章节: 结构体

问题描述 :

本学期大家学习了C语言程序设计,现在需要你实现一个成绩排名系统。

假设他们每个人都有三门课程,C语言程序设计、计算机导论和英语,要求把成绩好的同学放到前面。

具体要求是先按个人的总成绩进行排名,如果某两个人的总分相同,则按他们的C语言程序设计成绩进行排名,如果总成绩和C语言程序设计成绩都相同时,则再按照他们的计算机导论成绩进行排名(输入的数据保证这两个人的计算机导论成绩不会再相同)。try to do it _

输入说明 :

输入多组数据。

每组数据的第一行为学生的数目N(N<=100),接下来的N行,每行输入一个学生的信息,包括:学生姓名(长度小于20)、C语言程序设计成绩(0到100的整数)、计算机导论成绩(0到100的整数)和英语成绩(0到100的整数)。

每两个数据之间有一个空格,学生姓名中不包含空格。

输出说明 :

对于每组输入,输出按照成绩从高到低排序的姓名、总分、C语言程序设计、计算机导论和英语成绩序列,每个学生占一行。

我们保证不会存在两个人总成绩和各门的成绩都分别相同的情况。

两组输出数据之间有一个空行,第一组数据前面及最后一组数据后面无空行。

输入范例 :

3
Henry 98 95 90
Marry 90 88 89
Jhon 92 90 95
3
zhangsan 90 90 90
lisi 85 95 90
wangwu 85 90 95

输出范例 :

Henry 283 98 95 90
Jhon 277 92 90 95
Marry 267 90 88 89

zhangsan 270 90 90 90
lisi 270 85 95 90
wangwu 270 85 90 95

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;

public class test_73 {
    /**
     * 73 多级排序
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int sum, n = 0;
        String trim;
        String[] temp, split, next;
        StringBuilder builder = new StringBuilder();
        ArrayList<String[]> lists = new ArrayList<>();
        //存数据
        while (sc.hasNext()) {
            if (n != 0) {
                System.out.println();
            }
            n = sc.nextInt();
            sc.nextLine();
            for (int i = 0; i < n; i++) {
                sum = 0;
                trim = sc.nextLine().trim();
                split = trim.split(" ");
                for (int j = 1; j < split.length; j++) {
                    sum += Integer.valueOf(split[j]);
                }
                temp = builder.append(split[0]).append(" ").append(sum).append(trim.substring(trim.indexOf(" "))).toString().split(" ");
                lists.add(temp);
                builder.setLength(0);
            }
            //排序
            lists.sort(new Comparator<String[]>() {

                @Override
                public int compare(String[] o1, String[] o2) {
                    if(Integer.valueOf(o2[1]) - Integer.valueOf(o1[1])!=0){
                        return Integer.valueOf(o2[1]) - Integer.valueOf(o1[1]);
                    }
                    if(Integer.valueOf(o2[2]) - Integer.valueOf(o1[2])!=0){
                        return Integer.valueOf(o2[2]) - Integer.valueOf(o1[2]);
                    }
                    return Integer.valueOf(o2[3]) - Integer.valueOf(o1[3]);
                }
            });
            Iterator<String[]> iterator = lists.iterator();
            while (iterator.hasNext()) {
                next = iterator.next();
                for (int i = 0; i < next.length; i++) {
                    if (i != next.length - 1) {
                        builder.append(next[i]).append(" ");
                    } else {
                        builder.append(next[i]);
                    }
                }
                System.out.println(builder.toString());
                iterator.remove();
                builder.setLength(0);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值