题目描述
某校发放奖学金共5种,获取条件各不同:
1.阳明奖学金,每人8000,期末平均成绩>80,且在本学期发表论文大于等于1篇;
2.梨洲奖学金,每人4000,期末平均成绩>85,且班级评议成绩>80;
3.成绩优秀奖,每人2000,期末平均成绩>90;
4.西部奖学金,每人1000,期末平均成绩>85的西部省份学生;
5.班级贡献奖,每人850,班级评议成绩>80的学生干部。
备注:假设获奖人数无限制,一人可兼得多项奖学金。例:某生,期末平均成绩87,班级评议成绩82,且是学生干部,则可同时获得梨洲奖学金和班级贡献奖,奖金总数4850。
输入要求
输入一个整数n表示有n个学生信息。
接下来n行每行输入一位同学的信息,包括姓名、期末平均成绩、班级评议成绩、是否学生干部、是否西部省份学生、发表论文数。
假设学生最多不超过100人。
输出要求
输出获得奖学金总数最高的学生的姓名和奖学金数。假如有多个学生,则输出第一个学生的信息即可。具体格式见样例。
输入样例
4
Yaolin 87 82 Y N 0
Chenwei 88 78 N Y 1
Liwen 92 88 N N 0
Zhangqin 83 87 Y N 1
输出样例
Chenwei
9000
模板
#include<stdio.h>
typedef struct StudentInfo
{
@-@ //设计结构体的成员,包括:姓名,分数,班级评议,是否学生干部,是否西部学生,论文数,奖学金
}STU;
STU s[100];
int main()
{
int n,max=-1,loc,i; //loc表示最高奖学金获得者的下标
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
scanf("%s",s[i].name); //输入姓名
scanf("%lf%lf",&s[i].sc,&s[i].cla); //输入分数和班级评议成绩
getchar();
s[i].leader=getchar(); //输入是否学生干部
getchar();
s[i].west=getchar(); //输入是否西部省份学生
scanf("%d",&s[i].paper); //输入发表论文数
getchar();
}
@-@ //设计语句判断是否可获得奖学金,有则计算奖学金数目
@-@ //设计语句计算最大奖学金数目及获得者信息
printf("%s\n%d\n",s[loc].name,s[loc].money);
return 0;
}
提示
表示姓名的字符串不含空格,长度不超过20。
来源
NBU OJ
#include<stdio.h>
typedef struct StudentInfo
{
char name[21];
double sc;
double cla;
char leader;
char west;
int paper;
int money;
}STU;
STU s[100];
int main()
{
int n,max=-1,loc,i; //loc表示最高奖学金获得者的下标
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
scanf("%s",s[i].name); //输入姓名
scanf("%lf%lf",&s[i].sc,&s[i].cla); //输入分数和班级评议成绩
getchar();
s[i].leader=getchar(); //输入是否学生干部
getchar();
s[i].west=getchar(); //输入是否西部省份学生
scanf("%d",&s[i].paper); //输入发表论文数
getchar();
}
for(i=0;i<n;i++)
{
s[i].money=0;
if(s[i].sc>80&&s[i].paper>=1)
{
s[i].money+=8000;
}
if(s[i].sc>85&&s[i].cla>80)
{
s[i].money+=4000;
}
if(s[i].sc>90)
{
s[i].money+=2000;
}
if(s[i].sc>85&&s[i].west=='Y')
{
s[i].money+=1000;
}
if(s[i].cla>80&&s[i].leader=='Y')
{
s[i].money+=850;
}
}//设计语句判断是否可获得奖学金,有则计算奖学金数目
for(i=0;i<n;i++)
{
if(s[i].money>max)
{
max=s[i].money;
s[loc]=s[i];
}
}//设计语句计算最大奖学金数目及获得者信息
printf("%s\n%d\n",s[loc].name,s[loc].money);
return 0;
}