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; }