【L2-027 名人堂与代金券】天梯赛L2系列详解

该篇博客介绍了一个使用C++编写的程序,旨在解决一个关于天梯赛排名和代金券奖励的问题。程序通过结构体排序处理学生的成绩,根据成绩范围计算代金券总值,并输出符合特定条件的学生排名。文章强调了在处理并列名次时的注意事项,以及如何优化代码以避免输出错误。
摘要由CSDN通过智能技术生成

天梯赛L2-027 名人堂与代金券

题目详情:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

思路:

这题在L2中算是简单题,一个结构体,用sort结构体排序,然后是要注意输出名次时要注意用一个变量来存储i名次
如果不并列,那么num = i的值,如果并列num的值不变

详细代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 5;
struct node
{
    string s;
    int grade;
}stu[maxn];
bool cmp(node x, node y)
{
    if(x.grade != y.grade)
        return x.grade > y.grade;
    else 
        return x.s < y.s;
}
int n,g,k;
int main()
{
    cin>>n>>g>>k;
    int sum = 0;
    for(int i=1; i<=n; i++)//从1开始方便名次的输出
    {
        cin>>stu[i].s>>stu[i].grade;
        if(stu[i].grade >= g && stu[i].grade <= 100)
            sum += 50;
        else if(stu[i].grade >= 60 && stu[i].grade < g)
            sum += 20;
    }
    sort(stu+1, stu+n+1, cmp);
    cout<<sum<<endl;
    int num = 0;
    for(int i=1; i<=n; i++)
    {
        if(stu[i].grade != stu[i-1].grade)//如果不并列,那么num = i的值,如果并列num的值不变
        {
            //cout<<i<<" ";如果不用一个变量来输出名次,会少输出并列的第五名
            num = i ;
        }
        //else{ //cout<<i-1<<" ";  num = i - 1; }//去掉这句话,满分,加上的话18分。为什么呢?
        //因为如果三个人都并列成绩的话,就会出错。
        if(num > k) //输出的名次够了,就跳出循环
            break;
        cout<<num<<" "<<stu[i].s<<" "<<stu[i].grade<<endl;
    }
}



知识总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值