• C++
  • 前缀和与差分0基础代码

  • @ 2025-2-16 16:33:03

一、前缀和——数数小能手的秘密武器

例子:想象你每天存零花钱,第1天1元、第2天2元、第3天3元...想知道到第5天总共存了多少?

前缀和数组就是帮你记住每一天的总金额:

#include <iostream>
using namespace std;

int main() {
    int money[] = {1, 2, 3, 4, 5}; // 每天的零花钱
    int total[5] = {}; // 存总金额的魔法盒子
    
    total[0] = money[0]; // 第1天总金额就是1元
    for(int i=1; i<5; i++) {
        total[i] = total[i-1] + money[i]; // 今天总金额=昨天总金额+今天的钱
    }
    
    // 打印结果:
    cout << "每天的总金额:";
    for(int n : total) cout << n << " "; // 输出:1 3 6 10 15
}

二、差分——搭积木的数学魔法

例子:用积木搭楼梯,每一层比前一层多1块积木,怎么快速计算每层用多少块?

#include <iostream>
using namespace std;

int main() {
    int stairs[] = {1, 2, 3, 4, 5}; // 每层的总积木数
    int diff[5] = {}; // 存每层新增积木的魔法盒子
    
    diff[0] = stairs[0]; // 第1层直接就是1块
    for(int i=1; i<5; i++) {
        diff[i] = stairs[i] - stairs[i-1]; // 这层新增的积木数
    }
    
    cout << "每层新增积木:";
    for(int n : diff) cout << n << " "; // 输出:1 1 1 1 1
}

三、超能力展示

  1. 前缀和的超能力:
// 想知道第3天到第5天存了多少钱?
int sum = total[4] - total[1]; // 15(总第5天) - 3(总第2天)=12元
  1. 差分的超能力:
// 想给第2-4层每层多加2块积木:
diff[1] += 2;  // 开始加的位置
diff[4] -= 2;  // 结束的下一个位置

// 重新计算总积木数:
stairs[0] = diff[0];
for(int i=1; i<5; i++) {
    stairs[i] = stairs[i-1] + diff[i];
}
// 现在stairs变成:1, 4, 6, 8, 10

四、记忆口诀

前缀和像记总账,每天叠加不会忘
差分就像记变化,哪里改动哪里加
两个工具配合用,复杂问题变简单

这些代码就像数学魔法,只要记住规律,你也能轻松解决很多计算问题!试着修改数字玩一玩,看看结果会怎么变吧~

0 条评论

目前还没有评论...