题目:
Description
求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。
Input
第一行为整数N(5 <= N <= 1000 )
第二行为空格隔开的N个数Ai(0 <= Ai <= 100 )
Output
输出空格隔开的平均数 众数 中位数(平均数保留两位小数,中位数保留一位小数)。
Sample Input
6
5 2 2 3 4 6
Sample Output
3.67 2 3.5
Hint
出现次数最多的数有且只有一个。
我的程序:
#include "stdio.h"
int main()
{
double max,max1,max3,t,t1,t2;
long i,j,n,a[10001],f[10001],max2;
scanf("%ld",&n);
memset(f,0,sizeof(f));
max1=0;
for (i=1;i<=n;i++)
{
scanf("%ld",&a[i]);
f[a[i]]++;
max1+=a[i];
}
max1/=n;
max=0;
for (i=1;i<=n;i++)
{
if (f[i]>max) {max=f[i];max2=i;}
}
for (i=1;i<n;i++)
{
for (j=1;j<=n-i;j++)
{
if (a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
}
if (n%2==1) {max3=a[n/2+1];} else {t1=a[n/2];t2=a[n/2+1];max3=(t1+t2)/2;}
printf("%.2f %ld %.1f\n",max1,max2,max3);
return 0;
}