NYOJ 60 谁获得了最高奖学金【结构体】

/*

题目大意:求解获得最高奖学金和总的奖学金

解题思路:结构体将他们输入,按题目要求求解就可以了

难点详解:输入时要注意有空格,去除空格(因为有字符输入,要用getchar去除字符)

关键点:结构体的使用

解题人:lingnichong

解题时间:2014-08-31    00:32

解题体会:一开始输入老错,调试了很长时间才改过来

*/

谁获得了最高奖学金

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述
    某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:

  1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;

  2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;

  3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;

  4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;

  5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;

  只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

  现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。

输入
第一行输入数据N,表示测试数据组数(0<N<100),每组测试数据输入的第一行是一个整数X(1 <= X <= 100),表示学生的总数。接下来的X行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。
输出
  每组测试数据输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这X个学生获得的奖学金的总数。
样例输入
1
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1
样例输出
ChenRuiyi
9000
28700
来源
NOIP2005

#include<stdio.h>
#include<string.h>

int sum[110];

struct node
{
	char name[25];
	int ave,ping;
	char std,wet;
	int num;
}per[110];

int main()
{
	int n,m;
	int i,j;

	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		memset(sum,0,sizeof(sum));
		for(i=0;i<m;i++)
		{

			getchar();
			scanf("%s%d%d%d",&per[i].name,&per[i].ave,&per[i].ping);

			scanf("%c",&per[i].std);
			getchar();
			scanf("%c",&per[i].wet);
			getchar();
			scanf("%d",&per[i].num);
			if(per[i].ave>80 && per[i].num>=1)
				sum[i]+=8000;
			if(per[i].ave>85 && per[i].ping>80)
				sum[i]+=4000;
			if(per[i].ave>90)
				sum[i]+=2000;
			if(per[i].ave>85 && per[i].wet=='Y')
				sum[i]+=1000;
			if(per[i].ping>80 && per[i].std=='Y')
				sum[i]+=850;
		}
		int tot=sum[0],max=sum[0];
		j=0;
		for(i=1;i<m;i++)
		{
			if(sum[i]>max)
			{
				max=sum[i];
				j=i;
			}
			tot+=sum[i];
		}
		printf("%s\n%d\n%d\n",per[j].name,sum[j],tot);

	}

	return 0;
}
时间: 2024-10-26 23:56:56

NYOJ 60 谁获得了最高奖学金【结构体】的相关文章

NYOJ 60 谁获得了最高奖学金

#include<stdio.h>#include<string.h>int main(){ int test,i,geshu,k,a[1100]; scanf("%d\n",&test); while(test--) { int flag=0,sum=0; struct { char name[20]; int qimo; int banyi; char ganbu; char xibu; int lunwen; int jiangjin; }scor

关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型

关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使用NSStringFromCGRect(CGRect rect)来直接打印一个结构体,其他打印可以参考以下内容 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFrom

C 语言之结构体

1 #include <stdio.h> 2 3 #include <struct.h> 4 5 #include <string.h> 6 7 8 9 // struct 是结构体的关键词. 10 11 typedef struct Student 12 13 { 14 15 char name[30]; 16 17 char addr[50]; 18 19 int age; 20 21 }STU;// STU=struct Student 22 23 24 25 2

结构体指针

结构体与指针 1.结构体指针的数值为某个结构体的内存空间的地址,从而指针指向某个结构体. 2.结构体指针的初始值为空(0),不指向任何结构体. 3.malloc操作:创建一个新的内存空间(从内存中选择一个内存空间存储结构体),p指向这个结构体,p的值为这个结构体的内存空间的地址. 4.结构体指针的赋值:一个结构体指针的数值等于另外一个结构体指针的数值,从而两个结构体指针指向相同的结构体.当对某个结构体进行访问时,选择的结构体指针只要满足该结构体指针指向这个结构体即可,即可以有很多种选择. 5.当

libevent源码分析1 ----evnet相关结构体分析

位于代码event-internal.h中. event_base类似事件的集合,你创建一个事件,必须将该事件指定一个集合. struct event_base { 50     const struct eventop *evsel; /*evsel和evbase就类比与类和对象之间的关系,evbase是evsel的 51     一个具体实现,指在这里使用的复用模型*/ 52     void *evbase; 53     /*这个event_base所关注的事件数目*/ 54     i

指针和结构体知识学习

这一周主要学习了C语言中的最灵活的技巧 --指针.指针也是一个变量,它有自己的地址也有指向的地址,一般来说我们更关注的是指针指向的地址.指针的指向可以是整数.浮点数.字符.数组,同样的也可以是一个函数. 指针的基本操作有赋值.求值.取指针地址.将一个整数指针加给指针,增加指针的值.减小指针的值和求差值.如下程序所示: 1 /*ptr_ops.c - 指针操作*/ 2 #include <stdio.h> 3 int main() 4 { 5 int urn[5] = {100, 200, 30

结构体指针排序

输入不超过30名学生的信息,包括姓名,单科分数,出生年月,对其排序后输出. 运用知识点:结构体.指针.排序.函数. 1 #include<stdio.h> 2 #include<string.h> 3 4 struct birth 5 { 6 int y; 7 int m; 8 int d; 9 }; 10 struct student 11 { 12 int num; 13 char name[20]; 14 double score; 15 struct birth birth

29._结构体

结构体  为什么需要结构体   为了表示一些复杂的事物,而普通的的基本   类型无法满足实际要求 什么叫结构体   把一些基本数据类型组合在一起形成的一个   新的复合数据类型,这个叫做结构体 如何定义结构体   三种方式,推荐使用第一种 1 /* 2 2015年04月26日 14:21:45 3 目的: 4 结构体的定义 5 */ 6 7 # include <stdio.h> 8 9 //第一种方式 10 struct Student1 11 { 12 int age; 13 float

HDU 1084 [What Is Your Grade?] 结构体排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1084 题目大意:共5道题,N个学生.做出5道满分,0道50分.做出1-4道的同学,若在前50%(向下取整),则获得95.85.75.65,若在后50%则获得90.80.70.60. 关键思想:结构体排序 //结构体排序,考虑边界 #include <iostream> #include <algorithm> #include <cmath> #include <me