水题,结构题二级排序,在对编号进行逆序排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
float sa;
int nu;
}Node;
Node logo[105];
int temp[105];
int comp1(const void *a,const void *b)
{
Node *p1,*p2;
p1 = (Node *)a;
p2 = (Node *)b;
if(p1->sa!=p2->sa)
return p2->sa-p1->sa;
return p1->nu-p2->nu;
}
int comp2(const void *a,const void *b)
{
return *(int*)b-*(int *)a;
}
void init(int n)
{
int i;
for(i = 0; i < n; i ++)
{
logo[i].sa = 0.;
logo[i].nu = i+1;
}
}
int main()
{
int i,j,n,m,k;
float a;
while(~scanf("%d%d%d",&n,&m,&k))
{
memset(temp,0,sizeof(temp[0]));
init(m);
for(i = 0;i < n; i ++)
{
for(j = 0; j < m; j ++)
{
scanf("%f",&a);
logo[j].sa += a;
}
}
qsort(logo,m,sizeof(logo[0]),comp1);
for(i = 0;i < k; i ++)
temp[i] = logo[i].nu;
qsort(temp,k,sizeof(temp[0]),comp2);
for(i = 0;i < k-1; i ++)
printf("%d ",temp[i]);
printf("%d\n",temp[i]);
}
return 0;
}