返回 课程

信奥AC之路-3级

0% 完成
0/0 步骤
  1. 第一课:数组基础
    4 主题|小节
  2. 第二课:数组基础二
    6 主题|小节
  3. 第三课:数组基础三
    6 主题|小节
  4. 第四课:数组基础四
    7 主题|小节
  5. 第五课:数组基础五
    5 主题|小节
  6. 第六课:数组用于统计,去重,排序
    5 主题|小节
  7. 第七课:冒泡排序
    6 主题|小节
  8. 第八课:数组连续性元素
    6 主题|小节
  9. 第九课:数组综合一
    7 主题|小节
  10. 第十课:字符数组
    7 主题|小节
  11. 第十一课:字符数组基础应用
    5 主题|小节
  12. 第十二课:字符数组基础应用二
    6 主题|小节
  13. 第十三课:字符数组进阶
    6 主题|小节
  14. 第十四课:字符串进阶二
    6 主题|小节
  15. 第十五课:字符串(STL)
    9 主题|小节
  16. 第十六课:字符串基础
    6 主题|小节
  17. 第十七课:字符串函数
    6 主题|小节
  18. 第十八课:字符串函数二
    4 主题|小节
  19. 第十九课:sort函数
    7 主题|小节
  20. 第二十课:字符串进阶
    7 主题|小节
  21. 第二十一课:字符串进阶二
    6 主题|小节
  22. 第二十二课:进制转换--十进制转其他进制
    5 主题|小节
  23. 第二十三课:进制转换--其他进制转十进制
    5 主题|小节
  24. 第二十四课:二进制,八进制,十六进制转换
    5 主题|小节
  25. 第二十五课:数据编码基础
    6 主题|小节
  26. 第二十六课:位运算基础
    6 主题|小节
课 9, 主题|小节 6
进行中

9.6 综合统计分析

2025年9月22日
课 进展
0% 完成

“最后,让我们来学习一个综合性的统计问题,”我说道,”这里涉及平均数、众数和中位数的计算,是数据分析的基础!”

9.6.1 求N个整数的平均数、众数和中位数

题目描述: 求 N 个整数的平均数,众数和中位数。

小知识

  1. 众数:出现次数最多的数
  2. 中位数:排序后位于中间位置的数(偶数个数时取中间两数的平均值)

输入格式: 第一行为整数 N ( 5≤N≤10000 ); 第二行为空格隔开的 N 个数 Ai ( 0≤Ai≤100)。

输出格式: 输出空格隔开的平均数 众数 中位数(平均数保留两位小数,中位数保留一位小数)。

样例输入

6
5 2 2 3 4 6

样例输出

3.67 2 3.5

代码实现

#include<bits/stdc++.h>
using namespace std;

int a[10005], cnt[110] = {0};
int n, sum, zs, ma = INT_MIN;  // zs众数,ma最大出现次数

int main(){
    cin >> n;
    
    // 输入数据并统计
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        sum += a[i];        // 累加求和
        cnt[a[i]]++;        // 统计每个数的出现次数
        
        // 更新众数
        if(cnt[a[i]] > ma){
            ma = cnt[a[i]];
            zs = a[i];
        }
    }
    
    // 重新构造排序后的数组(计数排序)
    int k = 0;
    for(int i = 0; i <= 100; i++){
        while(cnt[i]--){
            a[++k] = i;  // 按从小到大的顺序重新填入数组
        }
    }
    
    // 计算中位数
    double zws;
    if(n % 2 != 0) 
        zws = a[(n+1)/2];           // 奇数个数,取中间位置
    else 
        zws = (a[n/2] + a[n/2+1]) / 2.0;  // 偶数个数,取中间两数平均值
    
    // 输出结果
    printf("%.2lf %d %.1lf", sum*1.0/n, zs, zws);
    return 0;
}

算法解析

  1. 在输入的同时计算总和并统计每个数的出现次数
  2. 通过比较出现次数找出众数
  3. 使用计数排序的思想重新构造有序数组
  4. 根据数组长度的奇偶性计算中位数
  5. 计算平均数并按要求格式输出结果