杭电acm1084题,不知那里错了,求解!谢谢!

2024-12-23 03:58:33
推荐回答(2个)
回答1:

#include
struct Test
{
int p; // p是用来表示 解同样题数人的排名(同样4道题 时间少的 P小) 5道题与 0道题 的不用排序
int id; int h;int m;int s;int score;
};
int main()
{
struct Test test[100];
int n;
while(scanf("%d",&n) && n>=0)
{
int i,a[6]=;
for(i=0;i {
test[i].score=0; test[i].p=0;
scanf("%d%d:%d:%d",&test[i].id,&test[i].h,&test[i].m,&test[i].s);
}
int j,maxi;
for(i=0;i {
int b[6]= ;
switch(test[i].id)
{
case 4:
a[4]++;
for(j=0;j {
if(test[j].id!=4 || j==i )
continue;
if(test[j].h b[4]++;
else if(test[j].h>test[i].h)
continue;
else
{
if(test[j].m b[4]++;
else if(test[j].m>test[i].m)
continue;
else {
if(test[j].s b[4]++;
}
}
}
test[i].p=b[4]; break;
case 3:
a[3]++;
for(j=0;j {
if(test[j].id!=3 || j==i )
continue;
if(test[j].h b[3]++;
else if(test[j].h>test[i].h)
continue;
else
{
if(test[j].m b[3]++;
else if(test[j].m>test[i].m)
continue;
else
{
if(test[j].s b[3]++;
}
}
}
test[i].p=b[3]; break;
case 2:
a[2]++;
for(j=0;j {
if(test[j].id!=2 || j==i )
continue;
if(test[j].h b[2]++;
else if(test[j].h>test[i].h)
continue;
else
{
if(test[j].m b[2]++;
else if(test[j].m>test[i].m)
continue;
else
{
if(test[j].s b[2]++;
}
}
}
test[i].p=b[2]; break;
case 1:
a[1]++;
for(j=0;j {
if(test[j].id!=1 || j==i )
continue;
if(test[j].h b[1]++;
else if(test[j].h>test[i].h)
continue;
else
{
if(test[j].m b[1]++;
else if(test[j].m>test[i].m)
continue;
else
{
if(test[j].s b[1]++;
}
}
}
test[i].p=b[1]; break;
}
}
for(i=0;i {
if(test[i].id==5)
test[i].score=100;
else if(test[i].id==4)
{
if(test[i].p<=a[4]/2 || a[4]==1) // 如果只有1个人,其实也是95分的,下同
test[i].score=95;
else test[i].score=90;
}
else if(test[i].id==3)
{
if(test[i].p<=a[3]/2 || a[3]==1)
test[i].score=85;
else test[i].score=80;
}
else if(test[i].id==2)
{
if(test[i].p<=a[2]/2 || a[2]==1)
test[i].score=75;
else test[i].score=70;
}
else if(test[i].id==1)
{
if(test[i].p<=a[1]/2 || a[1]==1)
test[i].score=65;
else test[i].score=60; // 这里是score,不是p
}
else test[i].score=50;
printf("%d\n",test[i].score);
}
printf("\n");
}
}

回答2:

楼主啊,你的程序比天书还难看懂啊!没有这么麻烦吧!!!初看了一下,题中说first half of student是前一半的意思,不是第一名,估计你理解错了。举的例子因为只有3个人,前一半只能一个人得95分,是这个意思!!!说实话,真佩服你能写出这样的程序,有时间在帮你看看吧