POJ 4013 中位数

时间限制: 
2000ms
内存限制: 
65536kB
描述

中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值(如果这组数的个数为奇数,则中位数为位于中间位置的那个数;如果这组数的个数为偶数,则中位数是位于中间位置的两个数的平均值).
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)

输入
该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1 <= N <= 10000.
接着N行为N个数据的输入,N=0时结束输入
输出
输出中位数,每一组测试数据输出一行
样例输入
4103020403403050412340
样例输出
25402
 
(1)、源代码:
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int main()
{
                int i, j, n, t;
                int num[10001];
 
                while(1)
                {
                                cin >> n;
                                if(n == 0)
                                                break;
                                for(i = 0; i < n; i++)
                                                cin >> num[i];
                                for(i = 0; i < n; i++){
                                                t = num[i];
                                                j = i;
                                                while(j > 0 && num[j-1] >= t)
                                                {
                                                                num[j] = num[j-1];
                                                                j--;
                                                }
                                                num[j] = t;
                                }
                                if(n % 2 == 0)
                                                cout << (num[n/2 -1] + num[n/2]) / 2 << endl;
                                else
                                                cout << num[(n + 1)/2 - 1] << endl;
                }
    return 0;
}
 
(2)、解题思路:略
(3)、可能出错:计算出的中位数位置在数组中应当减1。
 
 
 
 
posted on 2012-05-02 22:07  谷堆旁边  阅读(538)  评论(0编辑  收藏  举报