计算客刷题笔记

身高排队(没有运行通过)

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;
        }
}

上一篇下一篇

猜你喜欢

热点阅读