#include iostream using namespace std; void Inputint a int n 读入序列 for int i = 0; i n; i++ cin ai; int Search_Midint A int B int n 求解两个升序序列的中位数 begin int i = 0 j = 0 k = 0 C2 6;
该程序存在以下问题:
-
没有包含必要的头文件,如
和 。 -
函数 Search_Mid 中的数组 C 的长度应该是 2n,而不是 26。
-
在 while 循环中,应该是比较 A[i] 和 B[j],而不是 A[i] 和 B[i]。
-
函数 Search_Mid 没有考虑序列长度为奇数的情况,需要特殊处理。
-
在序列长度为偶数时,应该返回中间两个数的平均值,而不是单独返回一个数。
-
输入的两个序列长度应该相等,否则无法计算中位数。
以下是修改后的代码:
#include
void Input(int a[], int n) { for (int i = 0; i < n; i++) cin >> a[i]; }
int Search_Mid(int A[], int B[], int n) { int i = 0, j = 0, k = 0, C[2*n]; while (i < n && j < n) { if (A[i] < B[j]) C[k++] = A[i++]; else C[k++] = B[j++]; } while (i < n) C[k++] = A[i++]; while (j < n) C[k++] = B[j++]; if (k % 2 == 0) return (C[k/2] + C[k/2-1]) / 2; else return C[k/2]; }
int main() { int n; while (cin >> n) { if (n == 0) break; int A[100], B[100]; Input(A, n); Input(B, n); cout << Search_Mid(A, B, n) << endl; } return 0; }
原文地址: http://www.cveoy.top/t/topic/btAT 著作权归作者所有。请勿转载和采集!