zoukankan      html  css  js  c++  java
  • 成绩大排队详解-编程练习题(100)

    目录

    题目:

    分析:

    C++代码:

    C++ STL代码:

    总结:


    题目:

    成绩大排队
    问题描述 读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
    输入形式

    每个测试输入包含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

    分析:

    解法一:这个题看着并不难,我们首先要选择好用什么数据结构存储学生信息,因为题目给出的输入形式中要求存入学生的姓名、学号、成绩,姓名学号是字符串,成绩是int类型,所以我们想到用结构体来存储

    typedef struct     /*学生信息*/
    {
        string name;   /*姓名*/
        string stuNum; /*学号*/
        int score;     /*分数*/
    }Student;          /*学生信息结构体新类型*/

    然后依次输入信息,遍历结构体数组找到成绩最高和成绩最低学生的下标,最后输出。

    解法二:如果熟悉C++ STL的话,我们知道map容器中的元素是自动按照key值从小到大(升序)排好的,如果我们把分数(score)作为map的键,姓名和学号作为值的话,我们读入之后就可以得到成绩最高(map最后一个元素)和成绩最低(map第一个元素)学生的姓名学号了,直接输出即可。见代码C++STL。

    C++代码:

    #include <iostream>
    #include <string>
    using namespace std;
    
    typedef struct     /*学生信息*/
    {
        string name;   /*姓名*/
        string stuNum; /*学号*/
        int score;     /*分数*/
    }Student;          /*学生信息结构体新类型*/
    
    int main()
    {
        int n;/*记录学生数*/
        int maxSub=0;/*成绩最高学生信息下标*/
        int minSub=0;/*成绩最低学生信息下标*/
        cin >> n;
        Student stu[n];
        for(int i=0; i<n; i++)/*读入学生信息*/
        {
            cin >>stu[i].name;
            cin >>stu[i].stuNum;
            cin >>stu[i].score;
        }
        for(int j=1; j< n; j++)
        {
            if(stu[maxSub].score < stu[j].score)/*比较得出成绩相对较高学生*/
            {
                maxSub = j;
            }
            if(stu[minSub].score > stu[j].score)/*比较得出成绩相对较低学生*/
            {
                minSub = j;
            }
    
        }
        cout << stu[maxSub].name << ' ' <<stu[maxSub].stuNum <<endl;/*输出成绩最高学生姓名和学号*/
        cout << stu[minSub].name << ' ' <<stu[minSub].stuNum <<endl;/*输出成绩最低学生姓名和学号*/
        return 0;
    }

    C++ STL代码:

    #include <iostream>
    #include <string>
    #include <map>
    using namespace std;
    
    int main()
    {
        map<int,string>mapStu;  /*定义map容器存储学生信息*/
        string name;            /*姓名*/
        string stuNum;          /*学号*/
        string stuInf;          /*学生信息=姓名+学号*/
        int score;              /*分数*/
        int n;
        cin >> n;
        for(int i=0; i<n; i++)
        {
            cin >> name;
            cin >> stuNum;
            cin >> score;
            stuInf = name + ' ' +stuNum;  /*将姓名学号合在一起存入map中*/
            mapStu.insert(pair<int,string>(score,stuInf)); /*往mapStu中插入一个元素,其中key为score,value为stuInf*/
        }
        map<int,string>::reverse_iterator iter= mapStu.rbegin();/*取出最后一个元素,即分数最大的学生*/
        cout << iter->second <<endl;
        map<int,string>::iterator itermin = mapStu.begin();/*取出最后一个元素,即分数最小的学生*/
        cout << itermin->second <<endl;
        return 0;
    }

    总结:

    熟悉C++ STL操作的话,代码会变得非常简单,简洁。虽然这个题目简单,但是就当熟悉STL了。

  • 相关阅读:
    后端——框架——容器框架——spring_core——《官网》阅读笔记——第三章节2(转换器)
    后端——框架——容器框架——spring_core——《官网》阅读笔记——第三章节3(格式化器)
    后端——框架——容器框架——spring_core——《官网》阅读笔记——第四章节(Spring EL表达式)
    后端——框架——容器框架——spring_core——《官网》阅读笔记——第六章节3(AOP)——待补充
    spring boot中线程池的基本使用
    面试题
    activemq的基本使用
    mysql的索引基础--------创建,优化,失效
    spring cloud中各个组件设置超时的详细解释
    spring cloud中Hystrix组件的基本使用
  • 原文地址:https://www.cnblogs.com/www-helloworld-com/p/10202962.html
Copyright © 2011-2022 走看看