#include<string.h>
int main()
{
int n,m,i=0,j,k,t,rs;
char s[1000][11],c;
int a[12][2],cnt[1000],sum[1000],sooda[1000]={0};
scanf("%d%d%*c",&n,&m);
while(scanf("%s",s[i])!=EOF)
{
sum[i]=0;
cnt[i]=0;
for(j=0;j<n;j++)
{
scanf("%d",&a[j][0]);
if(a[j][0]>0)
{
cnt[i]++;
if((c=getchar())=='(')
{
scanf("%d)",&a[j][1]);
a[j][0]=a[j][0]+a[j][1]*m;
}
}
else
a[j][0]=0;
sum[i]+=a[j][0];
}
i++;
rs=i;
}
for(j=0;j<rs;j++)
{
for(k=0;k<rs;k++)
{
if(cnt[j]<cnt[k])
{
sooda[j]++;
}
if(cnt[j]==cnt[k])
{
if(sum[j]>sum[k])
sooda[j]++;
else if(sum[j]==sum[k])
{
if(strcmp(s[k],s[j])<0)
sooda[j]++;
}
}
}
}
for(i=0;i<rs;i++)
{
for(j=0;j<rs;j++)
if(sooda[j]==i)
printf("%-10s %2d %4d\n",s[j],cnt[j],sum[j]);
}
return 0;
}
对比
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAX 1000
typedef struct
{
char name[11];
int sum;
int total;
}credit;
int cmp(const void *a, const void *b)
{
if ((*(credit *)a).total != (*(credit *)b).total)
return (*(credit *)a).total - (*(credit *)b).total;
else if ((*(credit *)b).sum != (*(credit *)a).sum)
return (*(credit *)b).sum - (*(credit *)a).sum;
else
return strcmp((*(credit *)b).name, (*(credit *)a).name);
}
int main(void)
{
int res, t, f;
int i, n, m, j;
char style[10];
credit c[MAX] = {0};
scanf("%d%d", &n, &m);
for (i = 0; scanf("%s", c[i].name) != EOF; i++)
{
for (j = 0; j < n; j++)
{
scanf("%s", style);
res = sscanf(style, "%d(%d)", &t, &f);
if (res == 2)
{
c[i].total++;
c[i].sum += t + f * m;
}
else if (res == 1 && t > 0)
{
c[i].total++;
c[i].sum += t;
}
}
}
qsort(c, i, sizeof(credit), cmp);
for (i--; i >= 0; i--)
printf("%-10s %2d %4d\n", c[i].name, c[i].total, c[i].sum);
return 0;
}