HDU 1084 What Is Your Grade?

17 篇文章 1 订阅
17 篇文章 0 订阅
/*
题目大意:
1、根据回答问题的数目,决定学生的分数;
2、回答题目数相同者,根据回答的时间的快慢,决定学生的分数;
3、回答题目数相同者,只有一个人可以获得95,85,75,65的分数,其他人只能为90,80,70,60
*/

# include <stdio.h>

struct Student    /*结构体,用于存储输入的数据*/  
{  
    int solved;   /*解决问题的数目*/  
    int located;  /*学生的位置*/  
    int h, m, s;  /*所花费的时间*/ 
	int consume;  //所花费的总时间
    int sco;      /*最终的成绩*/  
};

void sort(Student * stu, int num)
{
	for(int i = 0; i < num; i++)//两种极端情况
	{
		if (stu[i].solved == 5)  
		{  
			stu[i].sco = 100; 
		}
		if (stu[i].solved == 0)  
		{  
			stu[i].sco = 50;  
		}
	}
	int min,j,k,m,flag;
	//答对4道题的
	for(j = 0; j < num; j++)
	{
		if(stu[j].solved == 4)
		{
			min = stu[j].consume;
			for(k = 0; k < num; k++)
			{
				if(stu[k].solved == 4)
				{
					if(min >= stu[k].consume)
					{
						min = stu[k].consume;
						flag = stu[k].located;
						//printf("----%d\n", stu[k].located);
					}
				}
			}
			break;
		}	
	}
	min = 0; //最大值清零
	for(m = 0; m < num; m++)
	{
		if(stu[m].solved == 4)
		{
			if(stu[m].located == flag)
			{
				stu[m].sco = 95;
			}else
			{
				stu[m].sco = 90;
			}			
		}
	}
	//答对三道题的
	for(j = 0; j < num; j++)
	{
		if(stu[j].solved == 3)
		{
			min = stu[j].consume;
			for(k = 0; k < num; k++)
			{
				if(stu[k].solved == 3)
				{
					if(min >= stu[k].consume)
					{
						min = stu[k].consume;
						flag = stu[k].located;
					}
				}
			}
			break;
		}	
	}
	min = 0; //最大值清零
	for(m = 0; m < num; m++)
	{
		if(stu[m].solved == 3)
		{
			if(stu[m].located == flag)
			{
				stu[m].sco = 85;
			}else
			{
				stu[m].sco = 80;
			}
		}
	}
	//答对二道题的
	for(j = 0; j < num; j++)
	{
		if(stu[j].solved == 2)
		{
			min = stu[j].consume;
			for(k = 0; k < num; k++)
			{
				if(stu[k].solved == 2)
				{
					if(min >= stu[k].consume)
					{
						min = stu[k].consume;
						flag = stu[k].located;
					}
				}
			}
			break;
		}	
	}
	min = 0; //最大值清零
	for(m = 0; m < num; m++)
	{
		if(stu[m].solved == 2)
		{
			if(stu[m].located == flag)
			{
				stu[m].sco = 75;
			}else
			{
				stu[m].sco = 70;
			}
		}
	}
	//答对一道题的
	for(j = 0; j < num; j++)
	{
		if(stu[j].solved == 1)
		{
			min = stu[j].consume;
			for(k = 0; k < num; k++)
			{
				if(stu[k].solved == 1)
				{
					if(min >= stu[k].consume)
					{
						min = stu[k].consume;
						flag = stu[k].located;
					}
				}
			}
			break;
		}	
	}
	min = 0; //最大值清零
	for(m = 0; m < num; m++)
	{
		if(stu[m].solved == 1)
		{
			if(stu[m].located == flag)
			{
				stu[m].sco = 65;
			}else
			{
				stu[m].sco = 60;
			}
			
		}
	}
}

int main(void)
{
	int num;
	Student stu[100];
	while(scanf("%d", &num) != EOF)
	{ 
		getchar();    //吸收回车符。
		if(num < 0) break;
		int time = 0;
		for(int i = 0; i < num; i++)
		{
			scanf("%d %d:%d:%d", &stu[i].solved, &stu[i].h, &stu[i].m, &stu[i].s);
			stu[i].located = i;  /*记录下输入时的位置*/ 
			time = (stu[i].h * 3600) + (stu[i].m * 60) + (stu[i].s);
			stu[i].consume = time;
		}
		sort(stu, num);
		for(int j = 0; j < num; j++)
		{
			printf("%d\n", stu[j].sco);
		}
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值