- 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
}
三、超能力展示
- 前缀和的超能力:
// 想知道第3天到第5天存了多少钱?
int sum = total[4] - total[1]; // 15(总第5天) - 3(总第2天)=12元
- 差分的超能力:
// 想给第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 条评论
目前还没有评论...