当前位置:   article > 正文

【C++】1179 - 求N个整数的平均数、众数和中位数 一_1179: 【入门】求n个整数的平均数、众数和中位数

1179: 【入门】求n个整数的平均数、众数和中位数

问题

求 N 个整数的平均数,众数和中位数。
小知识:
众数
 如有 9 个数: 17 13 17 9 17 17 3 16 17  17 出现的次数最多,即为这组数的众数。 (本题确保测试数据中,出现次数最多的数只有一个)
中位数
 如有 9 个数: 102 170 96 90 97 106 110 182 100
将这 9 个数按一定的顺序(从大到小或从小到大)排列后得到:
  182 170 110 106 102 100 97 96 90  正中间的一个数是 102 , 102 是这组数的中位数。
 而这 10 个数:106 99 104 120 107 112 33 102 97 100
 按一定顺序排列后得到: 120 112 107 106 104 102 100 99 97 33
 正中间有两个数: 104 102 ,中位数就是这两个数的平均数,即 (104+102)/2=103 。
 在这里插入图片描述在这里插入图片描述

1.分析问题

  1. 已知:N个整数
  2. 未知:平均数、众数和中位数
  3. 关系:平均数:整数和/个数 众数:出现次数最多 中位数:正中间的数

2.定义变量

mode:众数
avg :平均数
mid:中位数

	//二、数据定义 
	int n,a[100],mode=1;
	double avg ,mid;
  • 1
  • 2
  • 3

3.输入数据

	//三、数据输入
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
		avg+=a[i];
	} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.数据计算

  1. 平均数
	avg/=n;//平均数
  • 1
  1. 中位数:需要判断输入是偶数个数还是奇数个数,寻找中位数还要按一定的顺序(从大到小或从小到大)排列。
int temp;//冒泡排序 
	for(int i=0;i<n-1;i++){
		for(int j=0;j<n-i-1;j++){
			if(a[j]>a[j+1]){
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}	
	}
	
	if(n%2!=0){//中位数
		mid=a[n/2]*1.0;
	}else{
		mid=(a[n/2-1]+a[n/2])*1.0/2;
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  1. 众数:寻找众数相对复杂一点,我这里采用的方式是将第一个数与后面的数比较,统计相等的个数。将统计好的个数与众数mode比较,如果大于众数,说明当前相同数字数量更多,那么将值用mode记录。然后第二个数与后面的数比较…直到最后两个数比较完成即可统计出出现最多的数的次数。
for(int i=0;i<n-1;i++){
		int count=1;
		for(int j=i+1;j<n;j++){
			if(a[i]==a[j]){
				++count;
			}
		}
		if(count>mode){
			mode=count;
		}	
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:N个整数
	//未知:平均数、众数和中位数
	//关系:平均数:整数和/个数 众数:出现次数最多 中位数:正中间的数

	
	//二、数据定义 
	int n,a[100],mode=1;
	double avg ,mid;

	//三、数据输入
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
		avg+=a[i];
	} 
	//四、数据计算 
	avg/=n;//平均数
	

	
	int temp;//冒泡排序 
	for(int i=0;i<n-1;i++){
		for(int j=0;j<n-i-1;j++){
			if(a[j]>a[j+1]){
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}	
	}
	
	
	
	for(int i=0;i<n-1;i++){
		int count=1;
		for(int j=i+1;j<n;j++){
			if(a[i]==a[j]){
				++count;
			}
		}
		if(count>mode){
			mode=count;
		}	
	}
	
	
	
	
	
	if(n%2!=0){//中位数
		mid=a[n/2]*1.0;
	}else{
		mid=(a[n/2-1]+a[n/2])*1.0/2;
	}



	//五、输出结果 
	printf("%.2f\n",avg);
	printf("%d\n",mode);
	printf("%.1f\n",mid);
	return 0;	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/517598
推荐阅读
相关标签
  

闽ICP备14008679号