水题一个。。分数加起来排两次序就行了
#include<stdio.h>
#include<stdlib.h>
struct Design
{
int index;
double point;
};
int cmp2511(const void *p1, const void *p2)
{
struct Design *d1 = (struct Design *) p1;
struct Design *d2 = (struct Design *) p2;
if (d1->point > d2->point)
return -1;
else if (d2->point > d1->point)
return 1;
else
return d1->index - d2->index;
}
int cmp2511res(const void *p1, const void *p2)
{
struct Design *d1 = (struct Design *) p1;
struct Design *d2 = (struct Design *) p2;
return d2->index - d1->index;
}
int main()
{
int n, m, k;
while (scanf("%d %d %d", &n, &m, &k) != EOF)
{
struct Design *array = malloc(m * sizeof(struct Design));
int i;
for (i = 0; i < m; i++)
{
array[i].index = i + 1;
array[i].point = 0;
}
while (n--)
{
double d;
for (i = 0; i < m; i++)
{
scanf("%lf", &d);
array[i].point += d;
}
}
qsort(array, m, sizeof(struct Design), cmp2511);
qsort(array, k, sizeof(struct Design), cmp2511res);
for (i = 0; i < k; i++)
printf(i ? " %d" : "%d", array[i].index);
putchar('\n');
free(array);
}
return 0;
}