当前位置: 代码迷 >> 综合 >> 1004 成绩排名 (20分)
  详细解决方案

1004 成绩排名 (20分)

热度:14   发布时间:2024-02-09 07:27:08.0

在这里插入图片描述


小思路

可以写一个结构体存姓名学号变量,然后开一个student[110]数组,循环读入。
然后,定义两个变量标识最大最小值。
我的原本的笨思路是,先处理第一条数据(让他初始化等于最大最小值),再循环读入剩下的数据。笨方法也能过,但是太笨了。
灵魂在于:初始化值:最大值最小,最小值最大

小解法1

初始化:最大值最小,最小值最大(这样只要有数据就一定会更新)

Student maxstud("", "", -1);
Student minstud("", "", 101);

注意:如果写了实参构造函数,一定也要写空参构造函数!!!

code

#include <iostream>
#include <string>using namespace std;typedef struct Student{string name;string id;int grade;Student(){}; //如果写了实参构造函数,一定要记得写空参构造函数!Student(string n, string i, int g){name = n;id = i;grade = g;}
}Student;int main()
{int n;cin>>n;Student stud[n+10];Student maxstud("", "", -1);Student minstud("", "", 101);for(int i=0; i<n ;i++){cin>>stud[i].name>>stud[i].id>>stud[i].grade;if(maxstud.grade < stud[i].grade)maxstud = stud[i];if(minstud.grade > stud[i].grade)minstud = stud[i];}cout<<maxstud.name<<" "<<maxstud.id<<endl;cout<<minstud.name<<" "<<minstud.id<<endl;return 0;}

小解法2

不用写结构体,也不用开数组去存,直接初始化值比较就好了,只是多定义几个变量就行。

#include <iostream>
#include <string>using namespace std;int main()
{int n;cin>>n;int maxscore = -1, minscore = 101, score;string maxname, minname, maxid, minid, name, id;for(int i=0; i<n ;i++){cin >> name >> id >> score;if(maxscore < score){maxscore = score;maxname = name;maxid = id;} if(minscore > score){minscore = score;minname = name;minid = id;}}cout << maxname<<" "<< maxid <<endl;cout << minname<<" "<< minid <<endl;return 0;}