悟的数组匹配

题目:

描述

牛牛刚学会数组不久,他拿到两个数组 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;
}
相关推荐
Dizzy.51722 分钟前
数据结构(查找)
数据结构·学习·算法
lalapanda1 小时前
Unity学习part4
学习
啄缘之间2 小时前
4.6 学习UVM中的“report_phase“,将其应用到具体案例分为几步?
学习·verilog·uvm·sv
专注VB编程开发20年3 小时前
除了 EasyXLS,加载和显示.xlsx 格式的excel表格,并支持单元格背景色、边框线颜色和粗细等格式化特性
c++·windows·excel·mfc·xlsx
slomay3 小时前
项目汇报PPT转视频制作 | 有字幕和配音版
经验分享·github
分别努力读书3 小时前
acm培训 part 7
算法·图论
武乐乐~3 小时前
欢乐力扣:赎金信
算法·leetcode·职场和发展
Jared_devin3 小时前
数据结构——模拟栈例题B3619
数据结构
'Debug3 小时前
算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)
算法
易基因科技3 小时前
易基因: ChIP-seq+DRIP-seq揭示AMPK通过调控H3K4me3沉积和R-loop形成以维持基因组稳定性和生殖细胞完整性|NAR
经验分享·数据挖掘·生物学·生物信息学