身高排队(没有运行通过)
2018-04-20 本文已影响90人
Airycode
实验小学为了强健学生的身体,每天课间都要组织学生在户外学做广播体操。
这一天,五年级三班的所有同学在老师的指引下将队形排成了 MM 行 NN 列。现已知所有同学的身高,数值为整数,单位:厘米。要求在所有同学中:
挑选出每列身高最高的同学作为此列的小队长为同学们带操;
将所有同学按身高从高到低的顺序进行排队;
求出所有同学们的平均身高(要求:四舍五入保留整数);
统计出不小于平均身高的学生人数。
请同学们用计算机编程的方法来解决以上问题。
输入格式
输入共有 M+1M+1 行:
第一行有:用 11 个空格隔开的两个整数 MM、NN,分别代表学生的行数和列数(其中 1\leq M\eq 10,1\leq N\leq 101≤N≤10);
后 MM 行有:每一行对应的是 NN 列数据,表示所有学生的身高尺寸,数值为整数,单位:厘米(其中:140140 厘米\leq≤ 身高 \leq 170≤170 厘米,不需判断此条件),数据之间空 11 格。
输出格式
输出共有 M+3M+3 行:
前 MM 行:每行一个数据为各列中身高最高的同学的高度 (要求:各列按从左到右的顺序);
第 M+1M+1 行:为所有同学按身高从高到低的顺序排队的高度 (要求数据之间有1个空格);
第 M+2M+2 行:只有一个数据为所有同学的平均身高 (要求:四舍五入,保留整数);
第 M+3M+3 行:只有一个数据,为不小于平均身高的学生人数。
样例输入
3 4
141 161 156 167
170 163 168 157
162 145 153 163
样例输出
170
163
168
167
170 168 167 163 162 161 157 156 153 145 141
159
7
代码实现:
package 排序;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int M = input.nextInt();
int N = input.nextInt();
int [][] arr = new int[M][N];
List<Integer> list = new ArrayList<Integer>();
int [] array = new int [M*N];
int k=0;
for (int i=0;i<arr.length;i++) {
for (int j=0;j<arr[0].length;j++) {
arr[i][j] = input.nextInt();
list.add(arr[i][j]);
array[k++] = arr[i][j];
}
}
//求每一行的最大值
List<Integer> result = getColMax(arr);
print(result);
//求所有的排序
sort(array);
//求平均数
int avg = getAvg(list);
System.out.println(avg);
//统计出不小于平均数
List<Integer> max = getThanAvg(list);
System.out.println(max.size());
}
private static void sort(int [] array) {
Arrays.sort(array);
for (int i=array.length-1;i>=0;i--) {
System.out.print(array[i]+" ");
}
System.out.println();
}
//统计大于平均值的数
private static List<Integer> getThanAvg(List<Integer> list) {
int avg = getAvg(list);
List<Integer> resultList = new ArrayList<Integer>();
if (list != null && list.size()>0) {
for (int i=0;i<list.size();i++) {
int temp = list.get(i);
if (avg < temp) {
resultList.add(temp);
}
}
}
return resultList;
}
//求平均值
private static int getAvg(List<Integer> list) {
double sum = 0;
if (list != null && list.size() > 0) {
for (int i = 0;i<list.size();i++) {
sum += list.get(i);
}
}
int result = (int)Math.round(sum/list.size());
return result;
}
//输出结果
private static void print(List<Integer> result) {
if (result != null && result.size()>0) {
for (int i=0;i<result.size();i++) {
System.out.println(result.get(i));
}
}
}
//得到每一行的最大值
private static List<Integer> getRowMax(int[][] arr) {
List<Integer> result = new ArrayList<Integer>();
int max = Integer.MIN_VALUE;
for (int i=0;i<arr.length;i++) {
for (int j=0;j<arr[0].length;j++) {
if (max <= arr[i][j]) {
max = arr[i][j];
}
}
result.add(max);
}
return result;
}
//得到每一列的最大值
private static List<Integer> getColMax(int[][] arr) {
List<Integer> result = new ArrayList<Integer>();
for (int i=0;i<arr[0].length;i++) {
int max = Integer.MIN_VALUE;
for (int j=0;j<arr.length;j++) {
if (max <= arr[j][i]) {
max = arr[j][i];
}
}
result.add(max);
}
return result;
}
}