OJ#203.身高排序

题目描述

​ 海贼小学为了强健学生的身体,每天课间都要组织学生在户外学做广播体操。​ 这一天,五年级三班的所有同学在老师的指引下将队形排成了 M行 N 列。
现已知所有同学 的身高,数值为整数,单位:厘米。要求在所有同学中:

  1. 挑选出每列身高最高的同学作为此列的小队长为同学们带操;
  2. 将所有同学按身高从高到低的顺序进行排队;
  3. 求出所有同学们的平均身高(要求:四舍五入保留整数);
  4. 统计出不小于平均身高的学生人数,平均身高按照第 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;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值