#include <stdio.h> // 引入标准输入输出库,用于输入输出函数 #include <stdlib.h> // 引入标准库,用于动态内存分配函数malloc和free // 定义一个函数hanshu,功能是返回两个整数的差的绝对值 int hanshu(int sum1, int sum2) { // 如果sum1大于等于sum2,返回sum1减去sum2的结果 if (sum1 >= sum2) return(sum1 - sum2); // 否则返回sum2减去sum1的结果 else return(sum2 - sum1); } // 主函数,程序入口 int main() { int n, m; // 定义两个整数变量n和m,分别表示两个数组的元素个数 // 从标准输入读取两个整数,分别赋值给n和m scanf("%d %d", &n, &m); // 动态分配(n+1)个int类型大小的内存空间,将地址赋值给指针a int* a = (int*)malloc((n + 1) * sizeof(int)); // 动态分配(m+1)个int类型大小的内存空间,将地址赋值给指针b int* b = (int*)malloc((m + 1) * sizeof(int)); int x = n, y = m; // 定义变量x和y,分别赋值为n和m(后续代码未使用这两个变量) int sum1 = 0; // 定义变量sum1,用于存储数组a所有元素的和,初始化为0 // 循环读取n个整数,存储到数组a中 for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } // 循环读取m个整数,存储到数组b中 for (int i = 0; i < m; i++) { scanf("%d", &b[i]); } // 计算数组a所有元素的和,存储到sum1中 for (int i = 0; i < n; i++) { sum1 += a[i]; } int min = sum1; // 定义变量min,用于存储最小差值,初始化为sum1 int sum2 = 0, l, k; // 定义变量sum2(用于存储数组b子数组的和)、l和k(用于记录子数组的起始和结束索引) // 外层循环:遍历数组b,确定子数组的起始索引i for (int i = 0; i < m; i++) { sum2 = b[i]; // 初始化sum2为b[i],即子数组的第一个元素 // 内层循环:遍历数组b,确定子数组的结束索引j for (int j = i + 1; j <= m; j++) // 注意:这里j的上限是m,可能导致数组b越界访问(b[m]未初始化) { sum2 += b[j]; // 将b[j]累加到sum2中,扩展子数组范围 // 如果当前子数组和sum2与sum1的差值绝对值小于当前最小值min if (hanshu(sum1, sum2) < min) { min = hanshu(sum1, sum2); // 更新最小值min l = i; // 记录当前子数组的起始索引i k = j; // 记录当前子数组的结束索引j } } } // 循环打印数组b中从索引l到k的所有元素 for (int x = l; x <= k; x++) { printf("%d ", b[x]); } // 释放动态分配的内存空间 free(a); free(b); return 0; // 程序正常结束,返回0 }