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。