题解 P1051 【谁拿了最多奖学金】
向日葵小班
·
·
题解
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int n,qm[105],bj[105],lw[105],h[105],hh;//定义每个学生的期末平均成绩,班级评议成绩,发表的论文数
string mz[105];//定义每个学生的名字
char gb[105],xb[105];//定义每个学生是否是学生干部,西部省份学生
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>mz[i]>>qm[i]>>bj[i]>>gb[i]>>xb[i]>>lw[i];//输入每个学生的姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数
if(qm[i]>80&&lw[i]>=1) //判断第i名学生是否可以得到院士奖学金
{
h[i]+=8000;//给第i名学生的奖学金总数加8000元
hh=hh+8000;//给学生奖学金总量加8000元
}
if(qm[i]>85&&bj[i]>80)//判断第i名学生是否可以得到五四奖学金
{
h[i]+=4000;//给第i名学生的奖学金总数加4000元
hh=hh+4000;//给学生奖学金总量加4000元
}
if(qm[i]>90)//判断第i名学生是否可以得到成绩优秀奖
{
h[i]+=2000;//给第i名学生的奖学金总数加2000元
hh=hh+2000;//给学生奖学金总量加2000元
}
if(qm[i]>85&&xb[i]=='Y')//判断第i名学生是否可以得到西部奖学金
{
h[i]+=1000;//给第i名学生的奖学金总数加1000元
hh=hh+1000;//给学生奖学金总量加1000元
}
if(bj[i]>80&&gb[i]=='Y')//判断第i名学生是否可以得到班级贡献奖
{
h[i]+=850;//给第i名学生的奖学金总数加850元
hh=hh+850;//给学生奖学金总量加850元
}
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)//NB的选排
{
if(h[i]<h[j])//如果第i名学生的奖学金是否低于第j名学生的奖学金
{
swap(h[i],h[j]);//把第i名学生的奖学金与第j名学生的的奖学金交换
swap(mz[i],mz[j]);//把第i名学生的名字与第j名学生的的名字交换
}
}
}
cout<<mz[1]<<endl<<h[1]<<endl<<hh;//输出奖学金最多的人的名字,奖学金最多的人的奖学金的总量,所有学生的奖学金的总量
return 0;
}