C++ 【题解】身高排队

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

题目描述

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

这一天,五年级三班的所有同学在老师的指引下将队形排成了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;
}
发布了6 篇原创文章 · 获赞 5 · 访问量 780

猜你喜欢

转载自blog.csdn.net/weixin_45425652/article/details/101869239