社区讨论

为啥只给了80分 求大神帮忙看看

P1051[NOIP 2005 提高组] 谁拿了最多奖学金参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi4g8733
此快照首次捕获于
2025/11/18 18:46
4 个月前
此快照最后确认于
2025/11/18 18:46
4 个月前
查看原帖
CPP
#include <iostream>
using namespace std;
int n;
struct student
{
    char name[20];
    int aver_grade;
    int clas_grade;
    char monitor;
    char western;
    int number;
    int schooler;
};//结构体
void judgement(struct student t[])
{
    for(int i=0;i<n;i++)
    {
        if(t[i].aver_grade>80&&t[i].number>0)
            t[i].schooler+=8000;
        if(t[i].aver_grade>85&&t[i].clas_grade>80)
            t[i].schooler+=4000;
        if(t[i].aver_grade>90)
            t[i].schooler+=2000;
        if(t[i].aver_grade>85&&t[i].western=='Y')
            t[i].schooler+=1000;
        if(t[i].clas_grade>80&&t[i].monitor=='Y')
            t[i].schooler+=850;
    }
}//奖金多少的判断函数
CPP
int main()
{
    struct student t[100],tem;
    int i,j,sum=0;
    cin>>n;
    for(i=0;i<n;i++)
        t[i].schooler=0;//初始化每个人的奖金
    for(int i=0;i<n;i++)
        cin>>t[i].name>>t[i].aver_grade>>t[i].clas_grade>>t[i].monitor>>t[i].western>>t[i].number;
    judgement(t);
    for(i=0;i<n;i++)
        sum+=t[i].schooler;//计算总值
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
             if(t[j].schooler<t[j+1].schooler)
            {
                tem=t[j+1];
                t[j+1]=t[j];
                t[j]=tem;
            }
        }
}//冒泡排序
CPP
    for(i=0;i<n;i++)
    {
        cout<<t[i].name<<endl<<t[i].schooler<<endl;
        if(t[i].schooler!=t[i+1].schooler)
            break;
}//输出奖金最多的一个或多的人 cout<<sum<<endl;//输出总奖金数
CPP
return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...