题解 P1051 【谁拿了最多奖学金】

本蒟蒻第一篇题解

其实很简单,一堆if判断是否有奖学金或写函数判断

我这里只展示函数判断

废话不多说,上代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct P//people 
{
string name;//名字 
int qimo, banji, lunwen, id, sum;//各个成绩,id,总和 
char ganbu, xibu;//是否为干部,西部学员    
};
P a[105];

bool isyuanshi(int x, int y)//判断是否有院士奖学金 
{
if(x > 80 && y >= 1)
return true;
else return false; 
}
bool iswusi(int x, int y)//判断是否有五四奖学金 
{
if(x > 85 && y > 80)
return true;
else return false; 
}
bool isyouxiu(int x)//判断是否有成绩优秀奖
{
if(x > 90)
return true;
else return false; 
}
bool isxibu(int x, char y)//判断是否有西部奖学金
{
if(x > 85 && y == 'Y')
return true;
else return false; 
}
bool isgongxian(int x, char y)//判断是否有班级贡献奖
{
if(x > 80 && y == 'Y')
return true;
else return false; 
}
bool cmp(P x, P y)//按奖学金总和排序 
{
if(x.sum != y.sum)
return x.sum > y.sum;
else//若总和一样,按id号 
{
return x.id < y.id;
}
}
int main()
{

int n;//总数 
long long asum = 0;//N个学生获得的奖学金的总数 
cin >> n;//读入 
for(int i = 0;i < n;i++)
{
cin >> a[i].name >> a[i].qimo >> a[i].banji >> a[i].ganbu >> a[i].xibu >> a[i].lunwen;//读入 
a[i].id = i;//id号 
}
for(int i = 0;i < n;i++)//判断奖学金总数 
{
if(isyuanshi(a[i].qimo, a[i].lunwen) == true) a[i].sum += 8000;
if(iswusi(a[i].qimo, a[i].banji) == true) a[i].sum += 4000;
if(isyouxiu(a[i].qimo) == true) a[i].sum += 2000;
if(isxibu(a[i].qimo, a[i].xibu) == true) a[i].sum += 1000;
if(isgongxian(a[i].banji, a[i].ganbu) == true) a[i].sum += 850;
}
sort(a, a + n,cmp);//排序 
for(int i = 0;i <= n;i++)
{
asum += a[i].sum;//总和 
}
cout << a[0].name << endl << a[0].sum << endl << asum;//输出 
return 0;//结束 
}

猜你喜欢

转载自www.cnblogs.com/delphini/p/12669252.html