1. 题目背景与需求分析
这道题目源自2004年全国青少年信息学奥林匹克联赛(NOIP)提高组的真题,题目编号P1089。作为一道经典的模拟类编程题,它考察的是选手对现实生活场景的抽象建模能力和基础编程实现技巧。
题目描述了一个名叫津津的小朋友的储蓄计划:每月妈妈给津津300元零花钱,津津需要将整百的钱存入妈妈那里,年末妈妈会返还20%的利息。我们需要编写程序模拟这个过程,计算年末津津手中的总金额(包括储蓄和利息)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题建模与算法设计
2.1 输入输出分析
输入是12个月每个月的预算开销(整数),输出有两种情况:
- 如果某个月钱不够用(包括储蓄后),输出第一个出现不足的月份(带负号)
- 如果全年都够用,输出年末总金额(储蓄金额*1.2 + 手中剩余现金)
2.2 核心变量设计
我们需要维护几个关键变量:
current_cash:当月手中的现金(初始为0)saved_money:累计储蓄金额(整百存储)monthly_income:固定每月收入300元
2.3 处理流程伪代码
code复制初始化 current_cash = 0, saved_money = 0
对于每个月i从1到12:
current_cash += 300
读取本月预算cost
current_cash -= cost
如果 current_cash < 0:
输出 -i
结束程序
计算可以储蓄的整百金额:save = (current_cash // 100) * 100
saved_money += save
current_cash -= save
输出 saved_money * 1.2 + current_cash
3. C++实现详解
3.1 基础版本实现
cpp复制#include <iostream>
using namespace std;
int main() {
int current = 0, saved = 0;
for (int month = 1; month <= 12; ++month) {
current
