班上选K名先进个人,由同学们投票选出,现已按序号汇总N名同学(序号依次为1,2,…,N)所得到的投票数(已知每位同学的票数不同),按照得票数从高到低输出前K名同学对应的序号。
时间: 2023-10-09 07:14:20 浏览: 109
好的,以下是使用 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int*)b - *(int*)a;
}
int main() {
int N, K;
scanf("%d%d", &N, &K);
int *votes = (int*)malloc(N * sizeof(int));
int i;
for (i = 0; i < N; i++) {
scanf("%d", &votes[i]);
}
qsort(votes, N, sizeof(int), cmp);
printf("前%d名同学的序号为:\n", K);
for (i = 0; i < K; i++) {
printf("%d ", i+1);
}
printf("\n");
for (i = 0; i < K; i++) {
int j;
for (j = 0; j < N; j++) {
if (votes[j] == votes[i]) {
printf("%d ", j+1);
}
}
}
printf("\n");
free(votes);
return 0;
}
```
上述代码中,我们使用了快速排序算法对同学的得票数进行降序排列,然后输出前 K 名同学的序号。需要注意的是,如果有相同的得票数,我们需要输出所有得票数相同的同学的序号。
希望能够帮助到你!
阅读全文