【PAT】1083 List Grades (25 分)

46 篇文章 0 订阅
44 篇文章 0 订阅
  • 题目大意:倒叙输出成绩在所给范围内的学生信息(所给学生信息的成绩各不相同)。

  • 思路:先排序,然后判断成绩是否在范围内,若在就输出。

  • 知识点:

    1. 结构体
    2. vector
    3. sort,自定义cmp
  • 代码:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    struct stu{
        string name, id;
        int grade;
    };
    
    bool cmp(stu s1, stu s2){
        return s1.grade > s2.grade;
    };
    
    int main(){
        int n, grade1, grade2;
        bool flag = false;
        scanf("%d", &n);
        vector<stu> v(n);
        for(int i = 0; i < n; i++){
            cin >> v[i].name >> v[i].id >> v[i].grade;
        }
        cin >> grade1 >> grade2;
    
        sort(v.begin(), v.end(), cmp);
        for(int i = 0; i < n; i++){
            if(v[i].grade >= grade1 && v[i].grade <= grade2) {   // 若不满足条件,不能break,因为如果第一个学生的成绩大于grade2,就会直接跳出循环
                flag = true;
                printf("%s %s\n", v[i].name.c_str(), v[i].id.c_str());
            }
        }
        if(!flag)
            printf("NONE");
        return 0;
    }
    
  • 总结:

    1. 一开始为了节省时间,在判断学生成绩是否在范围内时,我在不满足条件的情况下用break跳出循环了,结果有一个测试点没通过。但若不满足条件,不能break,因为如果第一个学生的成绩大于grade2,就会直接跳出循环;
    2. 排序题比较简单,但是几乎每次都有一两个测试点没通过。说明有一些细节我总是没注意到
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值