• EXCEL排序


    题目描述

    Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。 对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

    输入描述:

    测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。

    输出描述:

    对每个测试用例,首先输出1行“Case:”。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
    时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

    分析

    1. 根据不同的要求编写不同的comp函数,然后根据不同情况调用STLsort函数
    2. 根据题目要求输出id要限制根式,输出应为6位,不足的补0,使用printf("%06d", a[i].id);
      printf格式输出:%[flags][width][.perc][F|N|h|l]type 此时flag 为 0。
    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    struct student{
        int id;
        string name;
        int grade;
    };
    bool comp1(student a, student b){
         return a.id < b.id;
    }
    bool comp2(student a, student b){
        if(a.name != b.name) return a.name < b.name;
        else return a.id < b.id;
    }
    bool comp3(student a, student b){
        if(a.grade != b.grade) return a.grade < b.grade;
        else return a.id < b.id;
    }
    
    
    int main(){
        int n, c;
        student a[100000];
        while(cin >> n && n != 0){
            cin >> c;
            for(int i = 0; i < n; i++){
                cin >> a[i].id >> a[i].name >> a[i].grade;
            }
            if(c == 1){
                sort(a, a + n, comp1);
            }
            else if(c == 2){
                sort(a, a + n, comp2);
            }
            else
                sort(a, a + n, comp3);
            cout << "Case" << ":" << endl;
            for(int i = 0; i < n; i++){
                printf("%06d", a[i].id);
                    cout << " " << a[i].name << " " << a[i].grade << endl;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    高精度计算
    高精度除以低精度
    P1258 小车问题
    POJ 2352 stars (树状数组入门经典!!!)
    HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)
    HDU 3938 Portal (离线并查集,此题思路很强!!!,得到所谓的距离很巧妙)
    POJ 1703 Find them, Catch them(确定元素归属集合的并查集)
    HDU Virtual Friends(超级经典的带权并查集)
    HDU 3047 Zjnu Stadium(带权并查集,难想到)
    HDU 3038 How Many Answers Are Wrong(带权并查集,真的很难想到是个并查集!!!)
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10254252.html
Copyright © 2020-2023  润新知