小韦老师@神犇营-my0123-津津的储蓄计划

小韦老师@神犇营-my0123-津津的储蓄计划

题目:

描述

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20% 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100 元或恰好 100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如 11 月初津津手中还有 83 元,妈妈给了津津 300 元。津津预计 11 月的花销是 180 元,那么她就会在妈妈那里存 200 元,自己留下 183 元。到了 11 月月末,津津手中会剩下 3 元钱。

现在请你根据 2019 年 1 月到 12 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 2019 年年末,妈妈将津津平常存的钱加上 20% 还给津津之后,津津手中会有多少钱。

输入

输入包括 12 行数据,每行包含一个小于 350 的非负整数,分别表示 1 月到 12 月津津的预算。

输出

只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 -X,X 表示出现这种情况的第一个月;否则输出到 2019 年年末津津手中会有多少钱。

输入样例1

290
230
280
200
300
170
340
50 
90 
80 
200
60

输出样例1

-7
思路:

整体思路:
枚举 1~12 月,看看每个月预算是多少,有没有超支,若没有超支,则将整
百的钱存到妈妈那里, 并且算出手里剩余的钱。
具体步骤:

  1. 定义 4 个变量,并都初始化为 0:
	int remain = 0;  // 用来存储剩余的钱 
	int budget = 0;  // 用来接收每个月的预算 
	int save = 0;  // 存在妈妈那里的钱 
	int over = 0;  // 超出预算的月份

2.定义一个 bool 变量作为标记,标记是否已超出预算,false 表示没有超
出预算,true 表示超出了预算:

	bool flag = false; 

3.枚举 1~12 月,对于每一个月,做以下操作:

  1. 输入当月的预算
  2. 300 减去预算,再加上个月剩余的钱,就是当月剩下的钱
  3. 如果 flag 是 false 并且 当月剩余的钱小于 0 时,将月份记下来,
    并且将 flag 置为 true。
  4. 存钱,因为存的要整百存,所以可以直接用剩余的钱整除 100,注意
    这里存钱的单位是百。
  5. 算出当前剩下的钱,为存下整百后剩下的部分
	for (int i = 1; i <= 12; i++) {  // 对每个月进行操作 
		cin >> budget;  // 输入每个月的预算 
		// 每个月剩余的钱 = 上个月剩余的钱 + (当月妈妈给的 300 块 - 预算) 
		remain += 300 - budget;  
		// 如果之前没有超支,并且现在剩余的钱小于 0 (说明是第一次超支) 
		if (!flag && remain < 0) {  // 不可直接退出,影响输入完整性 
			over = i;  // 将第一个超支的月份记下 
			flag = true;  // 将 flag 置为 true,表示超支  
		}
		// 存的钱 = 之前存的钱 + 剩余的钱的整百部分(这里的单位是百)
		save += remain / 100;   
		remain %= 100;  // 手里剩余的钱(存了整百剩下的) 
	} 

4.如果超支了,则输出负号和超支的月份;否则输出所有钱:

	if(over) {  // 如果超支,则输出负号和超支的月份 
		cout << "-" << over;
	} else {  
		// 如果没有超支,则输出所有的钱
		// 所有的钱是存在妈妈那里的钱加上利息(存的钱的单位是百,记得乘以 100)
		// 再加上手里剩余的钱(不够整百的部分) 
		cout << save * 100 + save * 100 * 0.2 + remain;
	}
完整代码:
#include <iostream>

using namespace std;

int main() {	
	
	int remain = 0;  // 用来存储剩余的钱 
	int budget = 0;  // 用来接收每个月的预算 
	int save = 0;  // 存在妈妈那里的钱 
	int over = 0;  // 超出预算的月份 
	// 做标记,标记是否已超出预算,false 表示没有超出预算,true 表示超出了预算
	bool flag = false;      
	for (int i = 1; i <= 12; i++) {  // 对每个月进行操作 
		cin >> budget;  // 输入每个月的预算 
		// 每个月剩余的钱 = 上个月剩余的钱 + (当月妈妈给的 300 块 - 预算) 
		remain += 300 - budget;  
		// 如果之前没有超支,并且现在剩余的钱小于 0 (说明是第一次超支) 
		if (!flag && remain < 0) {  // 不可直接退出,影响输入完整性 
			over = i;  // 将第一个超支的月份记下 
			flag = true;  // 将 flag 置为 true,表示超支  
		}
		// 存的钱 = 之前存的钱 + 剩余的钱的整百部分(这里的单位是百)
		save += remain / 100;   
		remain %= 100;  // 手里剩余的钱(存了整百剩下的) 
	}
	if(over) {  // 如果超支,则输出负号和超支的月份 
		cout << "-" << over;
	} else {  
		// 如果没有超支,则输出所有的钱
		// 所有的钱是存在妈妈那里的钱加上利息(存的钱的单位是百,记得乘以 100)
		// 再加上手里剩余的钱(不够整百的部分) 
		cout << save * 100 + save * 100 * 0.2 + remain;
	}
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值