🏦《小杨的储蓄》故事大冒险!
🏰 一、讲故事
小杨有很多个储蓄罐,排成一排:
0号罐 1号罐 2号罐 3号罐 ...从第1天开始,小杨每天存钱!
规则是:
第1天存 1 元
第2天存 2 元
第3天存 3 元
第4天存 4 元
……
但是每天存到哪个罐子,要看输入告诉你!
最后,请你算出每个储蓄罐里有多少钱。💰
🎯 二、举个例子
输入:
3 4 0 1 0 2意思是:
有3个储蓄罐(0,1,2)
一共存4天
每天情况:
| 第几天 | 存多少钱 | 存到几号罐 |
|---|---|---|
| 1 | 1元 | 0号 |
| 2 | 2元 | 1号 |
| 3 | 3元 | 0号 |
| 4 | 4元 | 2号 |
🧮 三、最后结果
我们来算:
0号罐:
第1天 +1
第3天 +3
共:
41号罐:
第2天 +2
共:
22号罐:
第4天 +4
共:
4输出:
4 2 4🏗 四、怎么做?
我们准备一个数组来记录每个罐子的金额!
jar[0] 记录0号罐的钱 jar[1] 记录1号罐的钱 jar[2] 记录2号罐的钱🌟 五、解题思路(像机器人执行任务)
第一步:读入 n 和 d
int n, d; cin >> n >> d;n = 储蓄罐数量
d = 存钱天数
第二步:所有罐子清零
开始时都是空的:
0 0 0 0 0 ...第三步:每天存钱
第 i 天就存 i 元!
读入存到哪个罐子:
int a; cin >> a; jar[a] += i;意思:
把第 i 天的钱,加到 a号罐。
第四步:输出答案
把所有罐子的钱打印出来!
💻 六、参考程序
#include <iostream> using namespace std; int main() { int n, d; cin >> n >> d; int jar[1000] = {0}; // 所有储蓄罐开始是0元 for(int day = 1; day <= d; day++) { int x; cin >> x; // 今天存到x号罐 jar[x] += day; // 存入day元 } for(int i = 0; i < n; i++) { if(i > 0) cout << " "; cout << jar[i]; } return 0; }🔍 七、一步一步运行演示
输入:
3 4 0 1 0 2初始:
jar = [0,0,0]第1天
存1元到0号:
[1,0,0]第2天
存2元到1号:
[1,2,0]第3天
存3元到0号:
[4,2,0]第4天
存4元到2号:
[4,2,4]输出:
4 2 4🧠 八、这题学到了什么?
✅ 1. 数组记录多个数据
jar[i]记录第 i 号储蓄罐的钱。
✅ 2. 循环处理每天任务
for(day=1; day<=d; day++)每天都做一次。
✅ 3. 累加思想
jar[x] += day;不是覆盖,而是增加!
⚠️ 九、新手容易错的地方
❌ 错误1:写成
jar[x] = day;这会把以前的钱覆盖掉!
❌ 错误2:天数从0开始
for(day=0; ...)题目规定第1天开始!
❌ 错误3:输出忘记空格
注意格式!
🌈 十、升级思考
如果第 i 天存的是i*i元呢?
只改一行:
jar[x] += day * day;如果每天存两次钱呢?
也能继续模拟!
🏆 十一、总结口诀
数组计数,不要慌:
🎵 开数组,先清光
🎵 每天读入存哪方
🎵 第几天,就加几两
🎵 最后输出排成行
🎉 恭喜你,已经掌握了:
✅ 数组
✅ 模拟题
✅ 累加
✅ 循环处理输入