Description
计算有限个数的数据的中位数的方法是:把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。现在给出n个正整数,求他们的中位数。
Input
第一行:n —— 数列数字的个数(1 <=n<=1000)。
第二行:有n个正整数,每两个数中间用空格隔开(每一个正整数都小于10000)。
Output
求这N个正整数的中位数(保留小数点后两位有效数字)。
Sample Input
41 2 3 4
3
1 2 3
Sample Output
2.502.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("%.2fn",k/2.00); } else { k=a[len/2]; printf("%.2fn",k);//注意输出格式 } // break; } return 0; }这个题目没什么特别的地方。
首先是排序,按照递增或递减都可以。
把排好序的数存放在一个数组中方便后面调用。
看存放在数组中的数的长度。取中间值(奇数直接取中间值,偶数用中间的两个数的平均值)
注意:数组是从 a[0] 还是从 a[1] 存放的。