题目描述
给定一个长度为N的非降数列,求数列的中位数。
中位数:当数列的项数N为奇数时,处于中间位置的变量值为中位数;当N为偶数时,中位数则为处于中间位置的两个数的平均数。
输入格式
输入数据第一行为一个整数T(1 <= T <= 100),表示测试的组数。
对于每组测试数据:
第一行是一个正整数N(1 <= N <= 100),表示数列长度。
第二行有N个整数,整数之间用空格隔开,所有的整数都不超过105,表示这个数列。
输出格式
对于每组测试数据,输出数列的中位数。请不要输出小数点末尾多余的0。
输入样例
2
4
1 1 2 2
5
1 1 2 2 3
输出样例
1.5
2
题目分析
1、初始化数组 memset,在<string.h>头文件中
2、如何输出小数
①double mid = t / 2.0;
t为int型,除2.0,结果就强转为double
②double mid = (double)t / 2;
直接把t强转为double
3、题目中要求不能输出小数点后多余的0,我随便定义了一个double类型的数测试了一下,cout标准输出自动不输出小数点后多余的0。
代码
#include <iostream>
#include <string.h>
using namespace std;
int main(){
int T, N;
int a[100005];
cin >> T;
while(T--){
cin >> N;
memset(a, 0, sizeof(a));
for(int i = 0; i<N; i++){
cin >> a[i];
}
if(N%2 == 1){//奇数个
int mid = N / 2;
cout << a[mid] << endl;
}
else{//偶数个
int t = a[N/2] + a[N/2-1];
double mid = t / 2.0;
//double mid = (double)t / 2;
cout << mid << endl;
}
}
return 0;
}