P1089 [NOIP 2004 提高组] 津津的储蓄计划 (洛谷)
1063 字
5 分钟
P1089 [NOIP 2004 提高组] 津津的储蓄计划 (洛谷)
题目描述
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 元或恰好 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如 月初津津手中还有 元,妈妈给了津津 元。津津预计月的花销是 元,那么她就会在妈妈那里存 元,自己留下 元。到了 月月末,津津手中会剩下 元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。
现在请你根据 年 月到 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 年年末,妈妈将津津平常存的钱加上 还给津津之后,津津手中会有多少钱。
输入格式
行数据,每行包含一个小于 的非负整数,分别表示 月到 月津津的预算。
输出格式
一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 , 表示出现这种情况的第一个月;否则输出到 年年末津津手中会有多少钱。
注意,洛谷不需要进行文件输入输出,而是标准输入输出。
输入输出样例 #1
输入 #1
29023028020030017034050908020060输出 #1
-7输入输出样例 #2
输入 #2
29023028020030017033050908020060输出 #2
1580题解与分析
解题突破口
这是一道纯粹的模拟题。我们只需要设定两个变量:一个记录津津手里当前的余钱 current_money,另一个记录存在妈妈那里的钱 saved_money。
然后按照 个月的顺序依次进行模拟计算即可。
具体按月模拟的流程如下:
- 每个月月初,津津手里的钱增加 300 元。
- 减去当月的预算
budget:- 如果此时手里的钱不够花(即
current_money < budget),说明计划失败,直接输出负的当前月份-i并结束程序。 - 如果手里的钱够花,先扣除预算
current_money -= budget。
- 如果此时手里的钱不够花(即
- 结算剩余的钱,把“整百”的部分存给妈妈:
- 可以利用整数除法的特性
(current_money / 100) * 100来计算出能存多少钱。 - 把这部分钱累加到
saved_money中,并从current_money扣除。
- 可以利用整数除法的特性
- 如果 12 个月都顺利度过,最后输出
current_money + saved_money * 1.2即可。
代码实现
C++ 版本
#include <iostream>using namespace std;
int main() { int current_money = 0; // 手里留存的钱 int saved_money = 0; // 存在妈妈那里的钱 int budget;
for (int i = 1; i <= 12; i++) { cin >> budget; current_money += 300; // 妈妈月初给的 300 元
if (current_money < budget) { cout << -i << endl; // 出现不够用的情况,输出月份的负数并退出 return 0; }
// 扣除预算 current_money -= budget;
// 计算能存多少整百的钱 int save = (current_money / 100) * 100; saved_money += save; current_money -= save; }
// 年末返还 120%,加上手里剩下的钱 cout << current_money + saved_money * 1.2 << endl;
return 0;}Python 版本
current_money = 0saved_money = 0failed = False
for i in range(1, 13): budget = int(input()) current_money += 300
if current_money < budget: print(-i) failed = True break
current_money -= budget save = (current_money // 100) * 100 saved_money += save current_money -= save
if not failed: # 按照题目要求输出整数结果 print(int(current_money + saved_money * 1.2)) 相关文章 智能推荐
1
P1307 [NOIP 2011 普及组] 数字反转 (洛谷)
算法笔记 洛谷 P1307 [NOIP 2011 普及组] 数字反转的题解与代码实现。
2
P1428 小鱼比可爱 (洛谷)
算法笔记 洛谷 P1428 小鱼比可爱的题解与代码实现。
3
绵阳城市学院教务处密码加密算法分析
算法笔记 绵阳城市学院教务处登录密码加密算法分析。
4
绵阳城市学院校园网 Srun Portal 认证逆向分析
算法笔记 通过浏览器抓包与前端 JavaScript 分析,使用 Go 语言完整还原 Srun Portal 校园网认证流程,包括 HMAC-MD5、XXTEA、自定义 Base64 等加密算法的逐步分析。
5
绵阳城市学院某老师DeepAI查重系统v6.0分析
逆向工程 对绵阳城市学院某老师提供的 DeepAI 查重系统 v6.0 进行逆向分析,还原 PyInstaller 打包的 Python 源码,揭示其核心查重算法本质。
随机文章 随机推荐