首页 > 其他 > 详细

POJ 1243

时间:2014-07-18 14:31:45      阅读:256      评论:0      收藏:0      [点我收藏+]

#include<stdio.h>

#include<string.h>

#include<math.h>

#include<stdlib.h>

struct rank

{

char name[12];

int sol, tot, g, p[7], ind;//sol 解决题数 tot总时间

};

rank r[25];

int comp(const void *c, const void *d)

{

rank *a = (rank *)c; rank *b = (rank *)d;
if(a.sol>b.sol)return 1;
else if(a.sol<b.sol)return -1;
else
{

if(a.tot<b.tot)return -1;

else if(a.tot>b.tot) return 1;

else

{

if(a.g>b.g) return 1;

else if(a.g<b.g)return -1;

else

{

return strcmp(a.name,b.name);

}

}

}

}

int main()

{
int n,cnt=1;

scanf("%d",&n);

if(!n) break;

for(int i=0;i<n;i++)

{

r[i].sol=0;r[i].tot=0;r[i].g=0;

double t=0;

scanf("%s",r[i].name);

for(int i=0;i<7;i++)

{

scanf("%d",&r[i].p[j]);

if(r[i].p[j]>0)

{

r[i].sol++;r[i].tot+=r[i].p[j];

t += log((double)ranks[i].p[j]);

}

}

if(r[i].sol)

{

r[i].g=(int)(exp(t/ranks[i].sol) + 0.5);

}

}

qsort(r,n,sizeof(rank),comp);

printf("CONTEST %d\n", cnt);

cnt++;

for(int s= 0; s < n; s++)

{

if(s < 9)

{

printf("0");

}

if(s > 0 && ranks[s].sol == ranks[s-1].sol && ranks[s].tot == ranks[s-1].tot && ranks[s].g == ranks[s-1].g)

{

ranks[s].ind = ranks[s-1].ind;

}

else

{

ranks[s].ind = s + 1;

}

printf("%d %-10s %d %4d %3d %3d %3d %3d %3d %3d %3d %3d\n", ranks[s].ind, ranks[s].name, ranks[s].sol, ranks[s].tot, ranks[s].g,

ranks[s].p[0], ranks[s].p[1], ranks[s].p[2], ranks[s].p[3], ranks[s].p[4], ranks[s].p[5], ranks[s].p[6]);

}

}

return 0;

}

 

     

总结:

1.本题参赛队员的数据过多,建议采用结构体数据类型;

2.采用qsort函数进行快速排序,其中的comp函数应当仔细研究;

3.输出格式应该十分小心,一失足成千古恨啊~

POJ 1243,布布扣,bubuko.com

POJ 1243

原文:http://www.cnblogs.com/khbcsu/p/3852696.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!