/* 题目大意: 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; }
原文地址:http://blog.csdn.net/xu758142858/article/details/44116489