Description
计算有限个数的数据的中位数的方法是:把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。现在给出n个正整数,求他们的中位数。
Input
第一行:n —— 数列数字的个数(1 <=n<=1000)。
第二行:有n个正整数,每两个数中间用空格隔开(每一个正整数都小于10000)。
Output
求这N个正整数的中位数(保留小数点后两位有效数字)。
Sample Input
4
1 2 3 4
3
1 2 3
1 2 3 4
3
1 2 3
Sample Output
2.50
这个题目没什么特别的地方。
2.00
题目链接: http://ccpc.ahu.edu.cn:8080/OJ/Problem.aspx?id=734
AC代码:
#include <stdio.h>
#include <stdlib.h>
//递增 的快排算法
int compInc(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
float k; //注意输出格式
int i,j,n,t;
int a[1001];
int len ;
while(scanf("%d ",&len)!=EOF){ //要注意输入的终止条件
for(i=0;i<len;i++) //输入
scanf("%d",&a[i]);
// printf("递增排序结果:\n");
qsort(a, len, sizeof(a[0]), compInc);
if(len%2==0) { //奇偶取中位数的方法不一样
k=(a[(len/2)-1]+a[(len/2)]);
printf("%.2f\n",k/2.00);
}
else {
k=a[len/2];
printf("%.2f\n",k);//注意输出格式
}
// break;
}
return 0;
}
这个题目没什么特别的地方。
首先是排序,按照递增或递减都可以。
把排好序的数存放在一个数组中方便后面调用。
看存放在数组中的数的长度。取中间值(奇数直接取中间值,偶数用中间的两个数的平均值)
注意:数组是从 a[0] 还是从 a[1] 存放的。