专栏文章
题解:P1051 [NOIP 2005 提高组] 谁拿了最多奖学金
P1051题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miq9w9f5
- 此快照首次捕获于
- 2025/12/04 01:20 3 个月前
- 此快照最后确认于
- 2025/12/04 01:20 3 个月前
P1051 [NOIP 2005 提高组] 谁拿了最多奖学金
进入正题
本题就是给定信息问满不满足那几种条件。模拟水题
此题最大的考点就是输入输出。所以,我们可以创建一个结构体数组,存储每一个人的奖学金数量,再进行数组排序,进行输出即可。
你以为这就结束啦?正当我高高兴兴的写下代码时:
CPPbool cmp(node a,node b)
{
return a.g>b.g;
}
.
.
.
.
.
cout<<s[1].a<<endl<<s[1].g<<endl<<ans;
九十分。
这就迎来了本题对于排序数组的坑点:
如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。
改!
CPPbool cmp(node a,node b)
{
return a.g<b.g;//改为小于号
}
.
.
.
.
.
cout<<s[n].a<<endl<<s[n].g<<endl<<ans;
满分了
完整代码
CPP#include<bits/stdc++.h>
using namespace std;
int n;
int ans;//计算n个学生获得的奖学金的总数。
struct node
{
string a;
int b;
int c;
char d;
char e;
int f;
int g;//个人总共得到的奖学金。
}s[107];
bool cmp(node a,node b)
{
return a.g<b.g;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i].a>>s[i].b>>s[i].c>>s[i].d>>s[i].e>>s[i].f;
if(s[i].b>80&&s[i].f>=1)//院士奖学金。
{
s[i].g+=8000;
}
if(s[i].b>85&&s[i].c>80)//五四奖学金。
{
s[i].g+=4000;
}
if(s[i].b>90)//成绩优秀奖。
{
s[i].g+=2000;
}
if(s[i].b>85&&s[i].e=='Y')//西部奖学金。
{
s[i].g+=1000;
}
if(s[i].c>80&&s[i].d=='Y')//班级贡献奖。
{
s[i].g+=850;
}
ans+=s[i].g;
}
sort(s+1,s+n+1,cmp);
cout<<s[n].a<<endl<<s[n].g<<endl<<ans;
return 0;//好习惯。
}
望管理员过审!本蒟蒻还没有发过过审的题解。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...