两组升序排列的数组A[m]和B[n], 求他们的中位数。
注意,中位数的概念哦~相信你会百度一下的~
格式:
第一行输入数字m,接下来一行输入数组A[m], 第三行输入数字n,第四行输入数组B[n],接下来输出中位数。两个数组的长度都不超过1000。
注意,需要保留5位小数哦~所以,你设计函数的时候请设计成double类型哦~
样例输入
1
3
5
1 2 4 5 6
样例输出
3.50000
#include<iostream>
#include <iomanip>
using namespace std;
int main(){
int arrayM[1005],arrayN[1005],array[2005];
int m,n;
cin >> m;
for(int i=0;i<m;i++){
cin >> arrayM[i];
}
cin>>n;
for(int i=0;i<n;i++){
cin >> arrayN[i];
}
int cnt=n+m;
int M=0,N=0,K=0;
for(int i=0;i<cnt;i++){
//需要考虑到一组数组最末+另一组的情况
if(N>=n){
array[i]=arrayM[M++];
}else if(M>=m){
array[i]=arrayN[N++];
}else if(arrayM[M++]<arrayN[N++]){
array[i]=arrayM[M++];
}else{
array[i]=arrayN[N++];
}
}
if(cnt%2==0){
cout << setiosflags(ios::fixed) << setprecision(5) << (double)(array[cnt/2]+array[(cnt-1)/2])/2 ;
}else{
cout << setiosflags(ios::fixed) << setprecision(5) << array[cnt/2] << endl;
}
}