#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
}