题解 | #牛牛的数组匹配#
牛牛的数组匹配
https://www.nowcoder.com/practice/3d3406f4a7eb4346b025cc592be5b875
#include <stdio.h>
int cmp_min(int sum1, int sum2)//该函数的作用为返回arr1和arr2的数组差值
{
return sum1 > sum2 ? sum1 - sum2 : sum2 - sum1;
}
int main() {
int arr1[80] = { 0 };
int arr2[80] = { 0 };
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int sum1 = 0;
int i = 0;
int j = 0;
int left = 0;
int right = 0;
for ( i = 0; i < n; i++) {
scanf("%d", &arr1[i]);
sum1 += arr1[i];
}
for ( i = 0; i < m; i++) {
scanf("%d", &arr2[i]);
}
int min = sum1;//让两数组最小差值等于arr1的总和
for ( i = 0; i < m; i++) {
int sum2 = arr2[i];
for ( j = i + 1; j <= m; j++) {//这里注意j是下标为i的下一个元素的下标,所以需要小于等于arr2的数组长度 为保证最后一位数组元素的值能够被顺利使用
if (cmp_min(sum1, sum2) < min) {//调用函数比较arr1和arr2的数组差值 如果小于当前min的值
min = cmp_min(sum1, sum2);//min为当前arr1与arr2的数组差值
right = j;//并且记录当前数组下标
left = i;//这里的left与right就表示为连续子数组之和与数组 a 之和最接近的首地址与末地址
}
sum2 += arr2[j];
}
}
for ( i = left; i < right; i++) {
printf("%d ", arr2[i]);
}
return 0;
}

