题目描述
海贼小学为了强健学生的身体,每天课间都要组织学生在户外学做广播体操。 这一天,五年级三班的所有同学在老师的指引下将队形排成了 M行 N 列。
现已知所有同学 的身高,数值为整数,单位:厘米。要求在所有同学中:
- 挑选出每列身高最高的同学作为此列的小队长为同学们带操;
- 将所有同学按身高从高到低的顺序进行排队;
- 求出所有同学们的平均身高(要求:四舍五入保留整数);
- 统计出不小于平均身高的学生人数,平均身高按照第 3问答案为准。
请同学们用计算机编程的方法来解决以上问题。
输入
输入共有 m+1行:
第一行有:用 1 个空格隔开的两个整数M,N ,分别代表学生的行数和列数(其中 1≤M≤10,1≤N≤10);
后 m 行有:每一行对应的是 N 列数据,表示所有学生的身高尺寸,数值为整数,单 位:厘米(其中:140 170 厘米,不需判断此条件),
数据之间空 1 格。
输出
输出共有 n+3行:
前 n 行:每行一个数据为各列中身高最高的同学的高度 (要求:各列按从左到右的顺 序);
第 n+1行:为所有同学按身高从高到低的顺序排队的高度 (要求数据之间有1个空 格);
第 n+2行:只有一个数据为所有同学的平均身高 (要求:四舍五入,保留整数);
第 n+3行:只有一个数据,为不小于平均身高的学生人数。
样例输入1
3 4
141 161 156 167
170 163 168 157
162 145 153 163
样例输出1
170
163
168
167
170 168 167 163 163 162 161 157 156 153 145 141
159
7
代码
#include <stdio.h>
#define N 11
int stu[N][N] = {0};
void printfEveryColMaxHeight ( int m, int n) {
for (int i = 0; i < n; i++) {
int maxH = 0;
for (int j = 0; j < m;j++) {
if (maxH < stu[j][i]) maxH = stu[j][i];
}
printf("%d\n", maxH);
}
}
void sortHeight (int m, int n) {
int arr[105] = {0};
int index = 0;
int count = m * n;
int highterNum = 0;
float sum = 0.0;
int avg = 0.0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n;j++) {
arr[index++] = stu[i][j];
sum += stu[i][j];
}
}
// 四舍五入输出
avg = (int)(sum / count + 0.5);
for (int i = 0; i < count - 1; i++) {
for (int j = i; j < count; j++) {
if (arr[i] < arr[j]) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
for (int i = 0; i < count; i++) {
if (arr[i] >= avg) highterNum++;
i < count - 1 ? printf("%d ", arr[i]) : printf("%d", arr[i]);
}
printf("\n%d\n%d", avg, highterNum);
}
int main () {
int m , n;
scanf("%d%d", &m, &n);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n;j++) {
scanf("%d", &stu[i][j]);
}
}
printfEveryColMaxHeight(m, n);
sortHeight(m, n);
return 0;
}