悟的数组匹配

题目:

描述

牛牛刚学会数组不久,他拿到两个数组 a 和 b,询问 b 的哪一段连续子数组之和与数组 a 之和最接近。

如果有多个子数组之和同样接近,输出起始点最靠左的数组。

输入描述:

第一行输入两个正整数 n 和 m ,表示数组 a 和 b 的长度。

第二第三行输入 n 个和 m 个正整数,表示数组中 a 和 b 的值。

输出描述:

输出子数组之和最接近 a 的子数组

示例1

输入:

复制代码
2 6
30 39 
15 29 42 1 44 1

输出:

复制代码
29 42

示例2

输入:

复制代码
6 1
50 47 24 19 46 47 
2

输出:

复制代码
2

思路讲解:

这段代码的功能是从两个数组中选择一段连续的子数组,使得两个子数组的和之差最小,并输出该子数组。

首先,在主函数中,使用 scanf 函数分别读入变量 nm,分别表示数组 ab 的长度。然后定义了两个数组 ab,并使用循环分别读入数组元素。

接下来,代码使用循环计算数组 a 的元素之和,并将其保存在变量 sum1 中。然后初始化变量 minsum1,表示初始的两个子数组的和之差。

接下来进入嵌套的循环,外层循环控制数组 b 的起始位置,内层循环控制数组 b 的结束位置。在内层循环中,计算当前子数组的和 sum2,并使用函数 num 计算 sum1sum2 的差的绝对值。如果得到的差值小于当前最小值 min,则更新 min 和相应的起始位置 k 和结束位置 l

最后,通过循环遍历输出数组 b 中起始位置 k 到结束位置 l 的元素。

请注意,代码中使用了函数 num 来计算两个数字的差的绝对值。函数 num 的实现非常简单,它接受两个参数 ab,并返回它们之间的差的绝对值。

答案:

cpp 复制代码
#include <stdio.h>

// 计算两个数的绝对值差
int num(int a, int b) {
    if (a >= b)
        return a - b;
    else
        return b - a;
}

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int a[100] = {0};
    int b[100] = {0};
    int sum1 = 0, sum2 = 0, min, k, l;

    // 读取数组 a 的元素
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    // 读取数组 b 的元素
    for (int i = 0; i < m; i++) {
        scanf("%d", &b[i]);
    }

    // 计算数组 a 的元素之和
    for (int i = 0; i < n; i++) {
        sum1 += a[i];
    }
    min = sum1;

    // 寻找两个子数组的和之差的绝对值最小值
    for (int i = 0; i < m; i++) {
        sum2 = b[i];
        for (int j = i + 1; j <= m; j++) {
            if (num(sum1, sum2) < min) {
                min = num(sum1, sum2);
                k = i;
                l = j;
            }
            sum2 += b[j];
        }
    }

    // 输出和之差最小的子数组
    for (int i = k; i < l; i++) {
        printf("%d ", b[i]);
    }

    return 0;
}
相关推荐
sealaugh324 分钟前
aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
笔记·学习·aws
布丁不叮早起枣祈4 分钟前
10.5学习
学习
长天一色8 分钟前
C语言日志类库 zlog 使用指南(第五章 配置文件)
c语言·开发语言
向上的车轮13 分钟前
Django学习笔记五:templates使用详解
笔记·学习·django
whltaoin15 分钟前
【408计算机考研课程】-C语言认知
c语言·考研
MinBadGuy16 分钟前
【GeekBand】C++设计模式笔记5_Observer_观察者模式
c++·设计模式
一般清意味……19 分钟前
快速上手C语言【上】(非常详细!!!)
c语言·开发语言
自由的dream20 分钟前
0-1背包问题
算法
卑微求AC20 分钟前
(C语言贪吃蛇)16.贪吃蛇食物位置随机(完结撒花)
linux·c语言·开发语言·嵌入式·c语言贪吃蛇
2401_8572979126 分钟前
招联金融2025校招内推
java·前端·算法·金融·求职招聘