B3867 [GESP202309 三级] 小杨的储蓄

B3867【小杨的储蓄】
一、题目详细讲解
1. 题目大意
小杨拥有 N 个储蓄罐,储蓄罐编号严格遵循:0 ~ N-1(重点必考)。
一共存钱 D 天,有着固定存钱规则:第 i 天存入 i 元。
每一天会选定一个储蓄罐存钱,同一个储蓄罐可以多次存钱。
题目要求:计算出每一个储蓄罐最终的总金额。
2. 输出规则(易错点)
① 按照编号从小到大输出:0号、1号、2号……N-1号存钱罐的金额;
② 数字之间用空格隔开,哪怕金额为0也要正常输出;
③ 严格按照顺序输出,不可打乱储蓄罐编号顺序。
3. 数据范围
1 ≤ N,D ≤ 1000,数据范围很小,使用普通整型数组即可完成累加。
4. 样例解释
样例1:
输入:2 3   0 1 0
分析:一共3天,第1天给0号存1元、第2天给1号存2元、第3天给0号存3元。0号总金额1+3=4,1号总金额2,输出 4 2。
样例2:
输入:3 5   0 0 0 2 0
分析:5天存钱金额依次为1、2345。0号存入1+2+3+5=11,1号无存钱记录金额为0,2号存入4,输出 11 0 4。
二、逐行超详细讲解
1. 头文件与常量、数组定义
① 万能头文件:包含C++所有通用输入输出、运算函数,比赛通用;
② using namespace std:简化代码,无需重复书写std;
③ const int N = 1e3+10:定义最大数组空间,适配题目最大数据范围;
④ vis累加数组(本题核心);
✅ 全局数组默认初始值全部为 0;
✅ vis[x] 专门用来存放 x号储蓄罐的总存钱金额。
2. 变量定义解析
① n:储蓄罐总个数;
② d:总共存钱的天数;
③ x:临时变量,储存当天选择的储蓄罐编号。
3. 第一层循环:每日存钱累加
① 循环范围 i=1 到 i=d:对应一共d天存钱时间;
② i 的含义:当前是第i天,当天存入i元(必考规则);
③ 读取编号x:获取当天要存钱的储蓄罐;
④ vis[x] = vis[x] + i:累加核心代码,在原有金额基础上,加上当天存入的i元;
💡 重点:同一个储蓄罐多次存钱,代码会自动累加,无需特殊判断。
4. 第二层循环:遍历输出金额
① 循环范围 i = 0 到 n-1:严格对应储蓄罐编号规则;
② 依次输出每一个储蓄罐的金额,包含金额为0的储蓄罐;
③ 顺序遍历,保证输出顺序从小到大,符合题目格式要求。
三、整体解题思路框架
步骤1:定义累加数组vis,数组初始全部为0,代表所有存钱罐初始没钱;
步骤2:输入储蓄罐数量n、存钱天数d;
步骤3:循环d天,每一天读取存钱罐编号,将当天金额累加到对应罐子;
步骤4:按编号顺序遍历所有储蓄罐,依次打印金额;
步骤5:程序结束。
四、易错坑点总结(考试必看)
❌ 坑点1:误以为第i天存固定1元 → 正确:第几天就存几元;
❌ 坑点2:储蓄罐编号从1开始 → 正确:必须从0开始;
❌ 坑点3:忽略金额为0的罐子 → 正确:哪怕没存过钱也要输出0;
❌ 坑点4:使用赋值=而不是累加+=,覆盖之前金额。
五、本题核心知识点
✅ 一维数组累加思想
✅ 下标映射(下标对应储蓄罐编号)
✅ 顺序模拟题目流程
✅ 双重for循环基础运用

 

posted @ 2026-05-14 15:06  乐意丘  阅读(41)  评论(0)    收藏  举报