众数和中位数

简介: 众数和中位数

题目

众数是指一组数据中出现次数多的数

众数可以是多个

中位数是指把一组数据从小到大排列,最中间的那个数,

如果这组数据的个数是奇数,那最中间那个就是中位数

如果这组数据的个数为偶数,那就把中间的两个数之和除以 2 就是中位数

查找整型数组中元素的众数并组成一个新的数组

求新数组的中位数

输入

输入一个一维整型数组,数组大小取值范围 0 < n < 1000

数组中每个元素取值范围, 0 < e < 1000

输出

输出众数组成的新数组的中位数

示例一

输入

10 11 21 19 21 17 21 16 21 18 16

输出

21

众数组成的新数组:21

众数组成的新数组的中位数:21

示例二

输入

2 1 5 4 3 3 9 2 7 4 6 2 15 4 2 4

输出

3

众数组成的新数组:2 4

众数组成的新数组的中位数:3

示例三

输入

5 1 5 3 5 2 5 5 7 6 7 3 7 11 7 55 7 9 98 9 17 9 15 9 9 1 39

输出

7

众数组成的新数组:5 7 9

众数组成的新数组的中位数:7

代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_INTS 100
void solveMethod(char *line){
    int tmp;
    int arr[MAX_INTS]={0};//c语言中 适用于静态数组
    char *token=strtok(line," ");
    //token是一个指向字符类型的指针变量。它并不直接存储字符,而是存储一个地址,该地址指向一个字符或一串字符(即字符串)的第一个字符的内存位置。
    //处理字符串 ,读取一行以空格分隔的整数。
    while(token!=NULL){
        sscanf(token,"%d",&tmp);//告诉函数将读取到的整数值存储到 tmp 变量所在的内存位置。修改变量 tmp 的值
        arr[tmp]++;
        token=strtok(NULL," ");//传递的是 NULL,则意味着 strtok() 应该从上次调用的位置继续分割
    }
    //统计数字出现频率:
    int max=0;
    for(int i=0;i<MAX_INTS;++i){
        if(arr[i]>max){
            max=arr[i];//计算arr中的元素出现最多出现多少次 
        }
    }
    //找出出现频率最高的数字并存入新数组:
    int newarr[MAX_INTS]={0};
    int j=0;
    for(int i=0;i<MAX_INTS;++i){
        if(arr[i]==max){//出现次数最多的几个数
            newarr[j++]=i;//newArr是包含众数的数列 (递增有序)
        }
    }
    //计算中位数:
    int size=j;
    int res=0;
    if(size%2==0){
        res=(newarr[size/2]+newarr[size/2-1])/2;
    }
    else{
        res=newarr[size/2];
    } 
    printf("%d\n",res);
}
int main(){
    char line[1000];
    fgets(line,1000,stdin);//用于从指定的文件流(如标准输入 stdin)读取一行文本数据并存入缓冲区。
    line[strcspn(line,"\n")]=0;//从用户输入的一行文本中删除末尾的换行符。将换行符赋值为 0,即空字符
    solveMethod(line);
    return 0;
}

运行结果:

解释

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

  • 这些行包含了标准输入输出库(stdio.h)、标准库(stdlib.h)和字符串处理库(string.h),它们提供了用于输入输出、内存分配、字符串操作等功能的函数。

#define MAX_INTS 100

  • 这定义了一个常量 MAX_INTS,表示数组的最大大小为 100。

函数内部的代码:

  1. 统计数字出现频率:
  • 创建一个整数数组 arr 来存储每个数字出现的次数。
  • 使用 strtok 函数将输入字符串 line 分割成以空格分隔的数字。
  • 遍历每个数字:
  • 使用 sscanf 函数将字符串转换为整数。
  • 将对应数字在 arr 数组中的计数加 1。
  1. 找出出现频率最高的数字并存入新数组:
  • 找到 arr 数组中的最大值 max,代表出现频率最高的数字。
  • 创建一个新的数组 newarr 来存储出现频率最高的数字。
  • 遍历 arr 数组,将出现频率为 max 的数字存入 newarr 数组。
  1. 计算中位数:
  • 如果 newarr 数组中的元素个数为偶数,则中位数为中间两个元素的平均值。
  • 如果 newarr 数组中的元素个数为奇数,则中位数为中间元素的值。
  • 计算出中位数并存入 res 变量中。
  1. 打印中位数:
  • 使用 printf 函数打印 res 变量的值,即中位数。

主函数main:

  • 读取输入字符串:
  • 声明一个字符串 line 来存储输入的数字。
  • 使用 fgets 函数从标准输入中读取一行字符串并存入 line 变量中。
  • 使用 strcspn 函数去除 line 字符串末尾的换行符。
  • 调用函数并返回:
  • 调用 solveMethod 函数来处理输入字符串 line 并计算中位数。
  • 返回 0 表示程序正常退出。

总结一下,这个程序的作用是:

  1. 读取一行以空格分隔的整数。
  2. 统计每个数字出现的频率。
  3. 找出出现频率最高的数字。
  4. 计算这些数字的中位数。
  5. 打印中位数。
相关文章
|
SQL 分布式计算 Unix
阿里云-DataWorks- ODPS SQL开发3-日期与字符、数学运算、聚合函数函数
阿里云-DataWorks- ODPS SQL开发3 本文主要讲解日常大量会接触到的一些常用的日期与字符、数学运算、聚合函数函数。
|
2月前
|
关系型数据库 分布式数据库 数据库
全国普通高校学科竞赛排行榜入选赛事:第2届PolarDB数据库创新设计赛开放报名!
「2025全国大学生计算机系统能力大赛——第2届PolarDB数据库创新设计赛」已启动报名,面向全国高校全日制本专科及研究生开放。赛事聚焦PolarDB-PG数据库向量计算优化,旨在提升学生系统设计、数据库调优与AI融合创新能力。比赛设初赛与决赛,总奖金25万元,由全国高等学校计算机教育研究会、浙江大学、阿里云等联合主办,是培养高端数据库人才的重要平台。
273 0
全国普通高校学科竞赛排行榜入选赛事:第2届PolarDB数据库创新设计赛开放报名!
|
7月前
|
监控 安全 物联网
Endpoint Protection Platforms (EPP)介绍
端点保护平台(EPP)是一种综合安全解决方案,旨在保护网络中的端点设备免受恶意软件、数据泄露和其他威胁。EPP整合了防病毒、数据加密、入侵防护等功能,并可通过云端管理实现全局威胁情报共享。相比传统防病毒软件,EPP更注重企业级多设备安全管理,支持行为分析与机器学习等高级功能。此外,部分EPP还集成了端点检测与响应(EDR),以应对已突破防线的威胁。在网络安全中,EPP和EDR各有侧重:EPP重预防,EDR重响应,二者结合可构建更全面的安全体系。
463 0
|
数据库 开发者 Python
Tornado框架:速度与简洁的完美结合,但它真的适合你吗?
【8月更文挑战第31天】在Web开发领域,框架的选择至关重要,影响着项目的结构、效率及扩展性。Tornado作为一个兼具性能与易用性的框架,提供了非阻塞I/O和异步支持,适用于高性能Web应用。与需配合WSGI服务器的Django和Flask不同,Tornado集成了HTTP服务器,能独立处理高并发请求。通过简单的安装和示例代码即可搭建HTTP服务器,并利用其异步机制提升资源利用率。尽管Tornado在处理I/O密集型任务时表现出色,但对于不熟悉异步编程的开发者来说,学习曲线较陡。总体而言,Tornado适合高并发场景,但在快速开发和复杂业务逻辑上,Django和Flask仍是不错的选择。
595 0
|
9月前
|
人工智能 安全 大数据
阿里云社区博客:开发者与企业的云端技术交流平台
阿里云社区是阿里云官方打造的技术交流平台,汇聚云计算、大数据、人工智能等领域专家与开发者。社区提供技术资源共享、专家互动、实战经验分享及最新技术动态等核心价值。主要板块包括技术文章、问答社区、活动大赛和产品文档,用户可通过注册账号、完善资料参与互动,享受成长体系与特色功能。无论是初学者还是资深专家,都能在此找到成长空间,探索云计算的无限可能。关注官方公众号,获取更多技术干货与活动资讯!
333 7
|
5月前
|
传感器 运维 监控
AR眼镜在工业运维的场景应用和方案说明
AR眼镜通过虚实融合技术,革新工业运维模式。从设备巡检、故障维修到员工培训,AR实现远程协作、实时数据叠加与沉浸式教学,大幅提升效率与准确性,推动智能工厂发展。
|
5月前
|
机器学习/深度学习 Ubuntu 物联网
ubuntu和linux 什么关系?
综上所述,Ubuntu与Linux之间存在着紧密的关系。Ubuntu是基于Linux内核的操作系统发行版之一,它继承了Linux的开源精神,并在此基础上进行了定制和优化,以更好地适应桌面和服务器应用。同时,Ubuntu也受益于Linux社区的支持和贡献,为用户提供了丰富的软件和工具选择。对于想要了解和使用开源操作系统的用户来说,Ubuntu无疑是一个值得推荐的选择。
|
SQL Java 数据库连接
阿里云ads学习
【8月更文第6天】
1079 3
|
SQL 存储 监控
ads基础使用教程
【8月更文挑战第6天】
2116 2
|
存储 NoSQL 定位技术
RedisGEO的基本使用
对GEO的基本介绍