c语言编程:班上有n个同学。现在同学们排成了一队,每个同学都想知道在自己前面有多少个同学比自己高。现在告诉你班上同学们排好队后每个同学的身高,请告诉每个人在他们前面有多少人比他们高。
时间: 2024-06-03 15:08:23 浏览: 177
C语言程序设计-统计出若干个学生的平均成绩,最高分以及得最高分的人数;
5星 · 资源好评率100%
以下是一种解法:
1. 定义一个结构体Student表示每个同学的信息,包括身高和比他高的人数count。
2. 读入n个同学的身高,存入一个数组中。
3. 对身高数组进行排序,从高到低。
4. 遍历排序后的身高数组,对每个同学的count进行累加,表示在他前面比他高的人数。
5. 按照原来的顺序输出每个同学的count。
具体实现如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int height;
int count; // 比他高的人数
} Student;
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int n;
scanf("%d", &n);
int height[n];
for (int i = 0; i < n; i++) {
scanf("%d", &height[i]);
}
qsort(height, n, sizeof(int), cmp); // 排序
Student students[n];
for (int i = 0; i < n; i++) {
students[i].height = height[i];
students[i].count = 0;
}
for (int i = n-2; i >= 0; i--) { // 从倒数第二个开始遍历
for (int j = i+1; j < n; j++) {
if (students[j].height > students[i].height) {
students[i].count++;
}
}
}
for (int i = 0; i < n; i++) {
printf("%d ", students[i].count);
}
printf("\n");
return 0;
}
阅读全文