赞
踩
求 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 。
mode:众数
avg :平均数
mid:中位数
//二、数据定义
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;
}
}
}
if(n%2!=0){//中位数
mid=a[n/2]*1.0;
}else{
mid=(a[n/2-1]+a[n/2])*1.0/2;
}
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;
}
}
#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;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。