NYOJ 60 谁获得了最高奖学金
难点是用节点表示学生信息,并增加一个变量保存奖学金金额。
附ac代码:
#include <stdio.h>
#include <stdlib.h>
struct Node{
char name[21], gov[2], min[2];
int test, ctest, paper, scholarship;
};
struct node{
int maxsch, subscript;
};
void judge(Node *stu){
//一等奖学金
if(stu->test > 80 && stu->paper)
stu->scholarship += 8000;
//二等奖学金
if(stu->test > 85 && stu->ctest > 80)
stu->scholarship += 4000;
//三等奖学金
if(stu->test > 90)
stu->scholarship += 2000;
//四等奖学金
if(stu->test > 85 && (stu->min)[0] == 'Y')
stu->scholarship += 1000;
//五等奖学金
if(stu->ctest > 80 && (stu->gov)[0] == 'Y')
stu->scholarship += 850;
}
int main(){
int t, x, sum;
scanf("%d", &t);
while(t-- && scanf("%d", &x)){
Node *stu = (Node *)malloc(sizeof(Node) * x);
for(int i = 0; i != x; ++i){
scanf("%s%d%d%s%s%d", stu[i].name, &stu[i].test,
&stu[i].ctest, stu[i].gov, stu[i].min, &stu[i].paper);
stu[i].scholarship = 0;
}
sum = 0;
//开始评奖学金并计算总金额
for(int i = 0; i != x; ++i){
judge(&stu[i]);
sum += stu[i].scholarship;
}
//找到得奖最多的学生
node max = {0, 0};
for(int i = 0; i != x; ++i)
if(stu[i].scholarship > max.maxsch)
max.maxsch = stu[i].scholarship, max.subscript = i;
printf("%s\n", stu[max.subscript].name);
printf("%d\n%d\n", stu[max.subscript].scholarship, sum);
free(stu);
}
return 0;
}
浙公网安备 33010602011771号