C++ 题解 (排序) 身高排队

mac2022-06-30  170

这个排序问题对我这个初学者而言,还是动了一点儿脑筋的

题目描述

实验小学为了强健学生的身体,每天课间都要组织学生在户外学做广播体操。

这一天,五年级三班的所有同学在老师的指引下将队形排成了M行N列。现已知所有同学的身高,数值为整数,单位:厘米。要求在所有同学中:

1.挑选出每列身高最高的同学作为此列的小队长为同学们带操; 2.将所有同学按身高从高到低的顺序进行排队; 3.求出所有同学们的平均身高(要求:四舍五入保留整数); 4.统计出不小于平均身高的学生人数。 请同学们用计算机编程的方法来解决以上问题。

输入

输入共有M+1行:

1.第一行有:用11个空格隔开的两个整数M、N,分别代表学生的行数和列数(其中 1≤M≤10,1≤N≤10);

2.后M行有:每一行对应的是N列数据,表示所有学生的身高尺寸,数值为整数,单位:厘米(其中:140厘米≤身高≤170厘米,不需判断此条件),数据之间空1格。

输出

输出共有M+3行:

1.前M行:每行一个数据为各列中身高最高的同学的高度 (要求:各列按从左到右的顺序); 2.第M+1行:为所有同学按身高从高到低的顺序排队的高度 (要求数据之间有1个空格); 3.第M+2行:只有一个数据为所有同学的平均身高 (要求:四舍五入,保留整数); 4.第M+3行:只有一个数据,为不小于平均身高的学生人数。

样例

输入

3 4 141 161 156 167 170 163 168 157 162 145 153 163

输出

170 163 168 167 170 168 167 163 163 162 161 157 156 153 145 141 159 7

思路

因为题目要求输入多行学生身高,并且要输出每一列的最大值,所以使用二维数组比较方便,后面再转为一维数组冒泡排序。

代码

#include <bits/stdc++.h> using namespace std; int main(){ int m/*行*/, n/*列*/; cin >> m >> n; double tall[m+1]/*行*/[n+1]/*列*/; //方阵中每个学生的身高 for(int i = 0; i < m; ++i){ for(int j = 0; j < n; ++j){ cin >> tall[i][j]; } } //输入 /***1.挑选出每列身高最高的同学作为此列的小队长为同学们带操***/ double taller[n+1]/*中转站*/; //每一列中最高的学生分别的身高 for(int i = 0; i < n; ++i){ taller[i] = tall[0][i]; } //初始化擂台 for(int i = 0; i < n; ++i){ for(int j = 1; j < m; ++j){ if(tall[j][i] > taller[i]) taller[i] = tall[j][i]; } } for(int i = 0; i < n; ++i) cout << taller[i] << endl; /***2.将所有同学按身高从高到低的顺序进行排队***/ double tals[m*n+1]; //方阵中每个学生的身高 int z = 0; for(int i = 0; i < m; ++i){ for(int j = 0; j < n; ++j){ tals[z] = tall[i][j]; ++z; } } //化二维为一维,全体同学一家亲 double pk/*中转站*/ = 0; //全体同学身高打擂台 int zc = z; while(zc){ for(int i = 1; i < zc; ++i){ if(tals[i] > tals[i-1]){ pk = tals[i]; tals[i] = tals[i-1]; tals[i-1] = pk; } } --zc; } for(int i = 0; i < z; ++i){ if(i == 0) cout << tals[i]; else cout << " " << tals[i]; } cout << endl; /***3.求出所有同学们的平均身高(要求:四舍五入保留整数)***/ double many = 0; for(int i = 0; i < z; ++i){ many += tals[i]; } many /= z; many = round(many); cout << many << endl; //四舍五入保留整数 /***4.统计出不小于平均身高的学生人数***/ int pep = 0; //累加器 for(int i = 0; i < z; ++i){ if(tals[i] >= many) ++pep; } cout << pep; return 0; }
最新回复(0)