PAT乙级题目对应知识点分类梳理
小思路
可以写一个结构体存姓名学号变量,然后开一个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;
}