1004 成绩排名 (20分)


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;
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值