Hello大家好,我是小亦,今天因为是放假,所以写的题解有小多,那么好了,那么今天我来讲的是来自NOIP2004年提高组的知识,既然是提高组却仍然还是入门的等级(指的是入门的最垃圾等级),正确率也还行,那话不多说赶紧给思路好吧qwq:
首先呢这道题是求枚举和模拟非常的简单,下面呢是我的个人思路步骤:
问题描述
津津每个月从妈妈那里得到300元零花钱。她每个月会预算自己的花销,并且总能花完预算。如果她预计到月末手中还会有超过100元,她就会将整百的钱存到妈妈那里,妈妈会在年末加上20%的利息还给津津。
目标
我们需要确定津津的储蓄计划是否会导致某个月的钱不够用。如果不会,我们需要计算年末时津津手中会有多少钱。
输入
- 12行数据,每行包含一个小于350的非负整数,表示每个月的预算。
输出
- 如果某个月钱不够用,输出
-X
,其中X
是出现这种情况的第一个月。 - 否则,输出年末津津手中会有多少钱。
解决方案
-
初始化变量:
remaining_money
:津津手中剩余的钱,初始为0。total_savings
:津津在妈妈那里的总储蓄,初始为0。month
:当前月份,从1开始。
-
逐月模拟:
- 对于每个月,执行以下步骤:
- 计算月初津津手中的总金额(
remaining_money + 300
)。 - 如果总金额减去预算大于等于100,计算可以储蓄的金额(整百),并更新
total_savings
和remaining_money
。 - 如果总金额减去预算小于100,更新
remaining_money
为剩余金额。 - 检查
remaining_money
是否小于0,如果是,则输出-X
(X为月份)并结束程序。
- 计算月初津津手中的总金额(
- 对于每个月,执行以下步骤:
-
计算年末总金额:
- 年末总金额 =
remaining_money
+total_savings * 1.2
。
- 年末总金额 =
-
输出结果:
- 如果没有出现资金不足的情况,输出年末津津手中会有多少钱。
说了那么多赶紧给代码在此之前小亦听信大家抄代码可耻哦
#include <iostream>
#include <vector>
int main() {
std::vector<int> budgets(12); // 存储每个月的预算
int total_savings = 0; // 总储蓄
int remaining_money = 0; // 手中剩余的钱
int month = 0; // 当前月份
// 读取每个月的预算
for (int i = 0; i < 12; ++i) {
std::cin >> budgets[i];
}
// 逐月模拟
for (month = 0; month < 12; ++month) {
int total_money = remaining_money + 300; // 月初总金额
int planned_savings = 0;
if (total_money >= budgets[month]) {
planned_savings = (total_money - budgets[month]) / 100 * 100;
total_savings += planned_savings;
remaining_money = total_money - planned_savings;
remaining_money -= budgets[month];
} else {
std::cout << "-" << (month + 1) << std::endl;
return 0;
}
}
// 计算年末总金额
int final_amount = static_cast<int>(remaining_money + 1.2 * total_savings);
std::cout << final_amount << std::endl;
return 0;
}
这次写了注释所以请放心食用~