题目:
1180: 【入门】求N个整数的平均数、众数和中位数
时间限制: 1.000 Sec 内存限制: 16 MB
提交: 9289 解决: 3041
[命题人:][下载数据: 70]
提交状态报告
题目描述
求N个整数的平均数,众数和中位数。
小知识:
1、众数
如有9个数:17 13 17 9 17 17 3 16 17
17出现的次数最多,即为这组数的众数。
2、中位数。
分两种情况。
①数字个数为奇数。
例如这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,就是中位数。。
输入
第一行为整数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 main() {
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,i,j,s=0,k,x=0,m=0;
cin>>n;
int a[n+1],b[10000];
for(i=1; i<=n; i++) {
cin>>a[i];
}
for(i=1; i<=n; i++) {
for(j=1; j<n-i+1; j++) {
if(a[j]<a[j+1]) {
swap(a[j],a[j+1]);
}
}
}
for(i=1; i<=n; i++) {
x=x+a[i];
}
cout<<fixed<<setprecision(2)<<x*1.0/n<<' ';
b[1]=1;
for(i=2; i<=n; i++) {
if(a[i]==a[i-1]) {
k++;
} else {
k=1;
}
if(k>s) {
s=k;
}
b[i]=k;
}
for(i=1; i<=n; i++) {
if(b[i]==s) {
cout<<a[i]<<' ';
}
}
if(n%2==0) {
m=a[n/2]+a[n/2+1];
cout<<fixed<<setprecision(1)<<m*1.0/2<<endl;
} else {
cout<<fixed<<setprecision(1)<<a[(n+1)/2]*1.0<<endl;
}
return 0;
}