• 1004 成绩排名 (20分)


    1004 成绩排名 (20分)
     

    读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

    输入格式:

    每个测试输入包含 1 个测试用例,格式为

    1 行:正整数 n
    第 2 行:第 1 个学生的姓名 学号 成绩
    第 3 行:第 2 个学生的姓名 学号 成绩
      ... ... ...
    第 n+1 行:第 n 个学生的姓名 学号 成绩
    
     

    其中姓名学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

    输出格式:

    对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

    输入样例:

    3
    Joe Math990112 89
    Mike CS991301 100
    Mary EE990830 95
    
     

    输出样例:

    Mike CS991301
    Joe Math990112
    
     
     
        这道题目要求按照学生的分数来排名,并且“在一组测试用例中没有两个学生的成绩是相同的” !注意这句话,意味着每个学生的成绩都不同,那么
    那么正好可以利用map容器的特性,因为map容器实际上是一颗红黑树,它对输入的每一组数据都是按照key值来进行排序的。待输入完以后map就是
    有序的了,且默认升序排列,这个时候直接输出map中的最后一个和第一个数据就是最高分和最低分学生的信息了。所以让学生的成绩来做键值。
        看代码吧
     1 #include<iostream>
     2 #include<map>
     3 #include<string>
     4 using namespace std;
     5 typedef struct{
     6     string name;
     7     string num;
     8 }st;
     9 int main()
    10 {
    11     int n,score;
    12     string name,num;
    13     st stu;
    14     cin>>n;
    15     map<int,st> student;
    16     map<int,st>::iterator iter;
    17     for(int i=0;i<n;i++)
    18     {
    19         cin>>name>>num>>score;
    20         stu.name=name;
    21         stu.num=num;
    22         student[score]=stu;
    23     }
    24     iter=student.end();
    25     iter--;
    26     cout<<iter->second.name<<" "<<iter->second.num<<endl;
    27     iter=student.begin();
    28     cout<<iter->second.name<<" "<<iter->second.num<<endl;
    29     return 0;
    30 }

    ac了,其实这道题也是很简单的

  • 相关阅读:
    使用git bash提交代码到github托管
    电子邮件的正则表达式
    PHP正则表达式及实例
    php中session_start()函数的作用
    mysql 中文乱码
    mysql 安装以及配置
    高质量JAVA代码编写规范
    DAO设计模式
    深入浅出UML类图
    分析业务模型-类图(Class Diagram)
  • 原文地址:https://www.cnblogs.com/buanxu/p/12812550.html
Copyright © 2020-2023  润新知