zoukankan      html  css  js  c++  java
  • 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了,其实这道题也是很简单的

  • 相关阅读:
    FPGA边缘检测
    Luogu P5856 【「SWTR-03」Game】
    Luogu P4707 【重返现世】
    Weight Balanced Leafy Tree
    Luogu P4311 【士兵占领】
    Luogu P4174 【[NOI2006]最大获利】
    Luogu P1646 【[国家集训队]happiness】
    Luogu P4313 【文理分科】
    Luogu P4249 【[WC2007]剪刀石头布】
    Luogu P2754 【[CTSC1999]家园 / 星际转移问题】
  • 原文地址:https://www.cnblogs.com/buanxu/p/12812550.html
Copyright © 2011-2022 走看看