您的位置:首页 > 其它

What Is Your Grade?

2014-01-15 19:57 288 查看
[align=left]Problem Description[/align]
“Point, point, life of student!”
This is a ballad(歌谣)well
known in colleges, and you must care about your score in this exam too.
How many points can you get? Now, I told you the rules which are used in
this course.
There are 5 problems in this final exam. And I will
give you 100 points if you can solve all 5 problems; of course, it is
fairly difficulty for many of you. If you can solve 4 problems, you can
also get a high score 95 or 90 (you can get the former(前者) only when
your rank is in the first half of all students who solve 4 problems).
Analogically(以此类推), you can get 85、80、75、70、65、60. But you will not pass
this exam if you solve nothing problem, and I will mark your score with
50.
Note, only 1 student will get the score 95 when 3 students have solved 4 problems.
I wish you all can pass the exam!
Come on!

[align=left]Input[/align]

Input contains multiple test cases. Each test case contains an
integer N (1<=N<=100, the number of students) in a line first, and
then N lines follow. Each line contains P (0<=P<=5 number of
problems that have been solved) and T(consumed time). You can assume
that all data are different when 0<p.
A test case starting with a negative integer terminates the input and this test case should not to be processed.

[align=left]Output[/align]

Output the scores of N students in N lines for each case, and there is a blank line after each case.

[align=left]Sample Input[/align]

4
5 06:30:17
4 07:31:27
4 08:12:12
4 05:23:13
1
5 06:30:17
-1


[align=left]Sample Output[/align]

100
90
90
95

100


这个题可以说是基数排序的一个简单版,但是我写了将近俩个小时才写出来,实在是水啊。。

#include<stdio.h>
#include<string.h>
void Exchange(int f[100],int n,int m)
{
int temp;
temp=f
;
f
=f[m];
f[m]=temp;
}
void Sort(int f[100],char time[100][10],int k)
{
for(int i=0;i<k;i++)
{
int p=k-1;
for(int j=k-1;j>i;j--)
{
if(strcmp(time[f[j]],time[f[j-1]])<0)
{
Exchange(f,j,j-1);
p=j;
}
}
if(p==k-1) break;
}
}
void Score(int score[100],char time[100][10],int solved[100],int n)
{
int f[100];
for(int i=1;i<5;i++)
{
int k=0;
for(int j=0;j<n;j++)
{
if(solved[j]==i)
{
f[k]=j;
k++;
}
}
Sort(f,time,k); //对时间进行排序
for(j=0;j<k/2;j++)
score[f[j]]=5;
}
}

void main()
{
int n;
char time[100][10];
int solved[100];
int score[100];
while(1)
{
scanf("%d",&n);
if(n<0) return;
for(int i=0;i<n;i++)
{
scanf("%d",&solved[i]);
scanf("%s",time[i]);
score[i]=0;
}
Score(score,time,solved,n);
for(i=0;i<n;i++)
{
switch (solved[i])
{
case 5 : printf("100\n"); break;
case 4 : printf("%d\n",90+score[i]); break;
case 3 : printf("%d\n",80+score[i]); break;
case 2 : printf("%d\n",70+score[i]); break;
case 1 : printf("%d\n",60+score[i]); break;
default : printf("50\n");
}
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: