OpenJudge - 04:谁拿了最多奖学金
解题思路:
1.由题意可知,典型的结构体变量题型,一个学生有很多属性,所以我们可以创建一个名为student的结构体变量,结构体变量中包含以下变量,int a;期末成绩,int b;班级评议成绩,char c;是否为三好学生,char d,是否为西部学生,int e;发表论文数量,int sum,该学生获得的奖学金
2.然后利用循环依次输入到结构体变量数组中
3.此时,对n个人进行遍历,利用条件判断语句,将这n个人的奖学金全部存入到sum中
4.对于sum进行比较,找到最大值并且保存他的位置编号,同时在遍历过程中计算所有奖学金的总数,然后按照格式输出即可
#include
using namespace std;
struct student{
string name;//学生姓名
int qm,py;//期末平均成绩,班级评议成绩
char x;//学生干部
char y;//西部省份学生
int lw;//发表论文数量
}m[105];//定义结构体数组
int a[105];
int main()
{
int n,sum=0,max=0,num;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>m[i].name>>m[i].qm>>m[i].py>>m[i].x>>m[i].y>>m[i].lw;
}//将n个学生的数据输入到结构体数组中
for(int i=1;i<=n;i++)//依次遍历数组
{
if(m[i].qm>80&&m[i].lw>0)
a[i]+=8000;//如果期末平均成绩大于80并且发表了论文,奖学金+8000
if(m[i].qm>85&&m[i].py>80)
a[i]+=4000;//如果期末成绩大于85并且评议成绩大于80,奖学金+4000
if(m[i].qm>90)
a[i]+=2000;//如果期末成绩大于90,奖学金+2000
if(m[i].qm>85&&m[i].y=='Y')
a[i]+=1000;//如果期末成绩大于85并且是西部省份学生,奖学金+1000
if(m[i].py>80&&m[i].x=='Y')
a[i]+=850;//如果评议成绩大于80,并且是班干部,奖学金+850
}
for(int i=1;i<=n;i++)//依次遍历每个同学的奖学金
{
if(a[i]>max)//如果奖学金大于最大值
{
max=a[i];//最大值更新
num=i;//并且保存编号
}
sum=sum+a[i];//累加所有学生的奖学金
}
cout<