64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <algorithm>
using namespace std;
int median(int arr[], int n)
{
if (n%2 == 0)
return (arr[n/2] + arr[n/2-1])/2;
else
return arr[n/2];
}
int max(int x, int y){
if(x > y) return x;
else return y;
}
int min(int x, int y){
if(x < y) return x;
else return y;
}
int getMedian(int ar1[], int ar2[], int n) {
int m1;
int m2;
if (n <= 0)
return -1;
if (n == 1)
return (ar1[0] + ar2[0]) / 2;
if (n == 2){
if(max(ar1[0], ar2[0]) < min(ar1[1], ar2[1]))
cout<<max(ar1[0], ar2[0])<<" "<<min(ar1[1], ar2[1])<<endl;
else
cout<<min(ar1[1], ar2[1])<<" "<<max(ar1[0], ar2[0])<<endl;
}
m1 = median(ar1, n);
m2 = median(ar2, n);
/* 相等可直接返回 */
if (m1 == m2)
cout<<m1<<" "<<m2<<endl;
if (m1 < m2) {
if (n % 2 == 0)
getMedian(ar1 + n/2 -1 , ar2, n/2 + 1);
else
getMedian(ar1 + n/2, ar2, n/2+1);
} else {
if (n % 2 == 0)
getMedian(ar2 + n/2 - 1, ar1, n/2 + 1);
else
getMedian(ar2 + n/2, ar1, n/2+1);
}
}
int main()
{
int array1[20];
int array2[20];
int n;
cin>>n;
for(int i = 0;i < n;i++)
cin>>array1[i];
for(int j = 0;j < n;j++)
cin>>array2[j];
getMedian(array1, array2,n);
}