zoukankan      html  css  js  c++  java
  • 题目1061:成绩排序(多关键字排序)

    http://ac.jobdu.com/problem.php?pid=1061

    题目描述:

        有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。

    输入:

        测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
        每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。

    输出:

        将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
        然后输出学生信息,按照如下格式:
        姓名 年龄 成绩

    样例输入:

    3

    abc 20 99

    bcd 19 97

    bed 20 97

    样例输出:

    bcd 19 97

    bed 20 97

    abc 20 99

    提示:

    学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。

    代码:

    # include<iostream>
    using namespace std;
     
    # include<string.h>
     
    struct Node
    {
        char name[101];
        int age;
        int score;
    };
     
    int main()
    {
        int n, i, j, k;
        Node node[1001], temp;
        while (cin >> n)
        {
            for (i = 1; i <= n; i++)
            {
                cin >> node[i].name >> node[i].age >> node[i].score;
            }
             
            for (i = 1; i <= n-1; i++)
            {
                k = i;
                for (j = i + 1; j <= n; j++)
                {
                    if (node[k].score > node[j].score)
                    {
                        k = j;
                    }
                    else if (node[k].score == node[j].score)
                    {
                        if (strcmp(node[k].name, node[j].name) > 0)
                        {
                            k = j;
                        }
                        else if (strcmp(node[k].name, node[j].name) == 0)
                        {
                            if (node[k].age > node[j].age)
                            {
                                k = j;
                            }
                        }
                    }
                }
                temp = node[k];
                node[k] = node[i];
                node[i] = temp;
            }       
             
            for (i = 1; i <= n; i++)
            {
                cout << node[i].name << " " << node[i].age << " " << node[i].score << endl;
            }
        }
    }
    /**************************************************************
        Problem: 1061
        User: mmcNuaa@163.com
        Language: C++
        Result: Accepted
        Time:770 ms
        Memory:1552 kb
    ****************************************************************/
    View Code
  • 相关阅读:
    设计模式之工厂模式-抽象工厂(02)
    1036 跟奥巴马一起编程 (15 分)
    1034 有理数四则运算 (20 分)
    1033 旧键盘打字 (20 分)
    1031 查验身份证 (15 分)
    大学排名定向爬虫
    1030 完美数列 (25 分)二分
    1029 旧键盘 (20 分)
    1028 人口普查 (20 分)
    1026 程序运行时间 (15 分)四舍五入
  • 原文地址:https://www.cnblogs.com/mmcmmc/p/3869114.html
Copyright © 2011-2022 走看看