从零单排PAT1004. 成绩排名

来源:互联网 发布:小米4手机只有2g网络 编辑:程序博客网 时间:2024/04/29 20:00

题目要求很简单,如下:

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

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

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

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

输入样例:
3Joe Math990112 89Mike CS991301 100Mary EE990830 95
输出样例:
Mike CS991301Joe Math990112
代码如下:

#include "stdafx.h"#include <iostream>#include <string>using namespace std;class Student{public:string name;public:string num;public:int score ;public:void getinformation(string a,string b,int c){name = a;num = b;score = c;}public:void print(){cout << name <<" "<< num <<endl;}};int main(){int n;int score;int i;//student a[n];cin >> n;string name ,num;Student min = Student(); Student max = Student(); max.score = 0;min.score = 100;for(i = 0 ;i < n ; i++){cin>>name>>num>>score;if(score >= max.score) //判断是否大于最大值的分数,如果存在则进行赋值{max.getinformation(name,num,score);}if(score <= min.score) //判断是否小于等于最小值的分数,如果存在则进行赋值{min.getinformation(name,num,score);}}max.print();  //第一行输出最高成绩min.print();//第二行输出最低成绩return 0;}

没什么难点,但是存在一个基本的问题,是关于C++的。我在这里用到了类,算是面向对象了。一般只要用到结构体即可,但是这里我还是用了一个简单的类去描述学生这个群体。但是这里有一个问题,是根据输入的数字定学生的个数,相当于输入之后才能确定构造个多少个学生对象,这的确是一个难题,因为所有类的对象数组,都必须显式的声明数组的大小。一般来说可以用vector,容器去存放学生的对象,最后再进行比较。


显然这是一种比较笨的方法,仔细分析下题目就可以知道,我们只需要知道最高的分数和最低的分数就可以了,至于其他的都是中间变量,我们可以不用去在意。所以只要实例化一个分数最高的学生和一个分数最低的学生就可以;只要分数低于这个最低的分数或者高于最高的分数,就可以刷新对应的学生所有属性,题目也就引刃而解。

0 0
原创粉丝点击