现在的位置: 首页 > 综合 > 正文

NYOJ 60 谁获得了最高奖学金

2016年09月29日 ⁄ 综合 ⁄ 共 1056字 ⁄ 字号 评论关闭

原题链接

难点是用节点表示学生信息,并增加一个变量保存奖学金金额。

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

抱歉!评论已关闭.