题解 | #牛牛的数组匹配#

牛牛的数组匹配

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

全部评论

相关推荐

嵌入式的小白:有道理哈,这种就看能不能捞
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务