#include<iostream> #include<fstream> #include<stdlib.h> using namespace std; bool judge(int n) {//判断整数奇偶 偶数返回true if(n % 2 == 0) return true; else return false; } double getAMid(int a[], int x, int y) {//求一个数组的中位数 if (judge(y - x + 1))//a查询个数为偶数 return (a[(y + x) / 2] + a[(y + x) / 2 + 1]) / 2.0;//求a中位数 else return a[(y + x) / 2]; } int find(int a[], int b[], int a1, int a2, int b1, int b2) { double az, bz;//用于记录数组a和b的中位数 int ap, bp; ap = (a2 +a1) / 2; bp = (b2 +b1) / 2; az = getAMid(a, a1, a2); bz = getAMid(b, b1, b2); if (az == bz)return az; if (a1 == a2 && b1 == b2)return (a[a1] + b[b1]) / 2.0; if (az > bz) {//舍弃az后的数与bz前的数 if ((a2 - a1 + 1) % 2 == 0)//为偶数 find(a, b, a1, ap, bp + 1, b2); else find(a, b, a1, ap, bp, b2); } if (az < bz) {//舍弃az前的数与bz后的数 if ((a2 - a1 + 1) % 2 == 0) find(a, b, ap+1, a2, b1, bp); else find(a, b, ap, a2, b1, bp); } } int main() { ifstream in("test.txt"); if (!in.is_open()) { cout << "failed to open file."; exit(1); } int n;//数组大小 in >> n; int a[3], b[3];//建立数组 for (int i = 0; i<n; i++) { in >> a[i]; } for (int i = 0; i<n; i++) { in >> b[i]; } double ans = find(a, b, 0, n - 1, 0, n - 1); cout << ans << endl; return 0; }