题目描述:
为了让津津学习如何储蓄,妈妈提出,津津可以把整百的钱存在她那,到了年末她会将所有储蓄加上20%还给津津。于是津津决定每个月初,在得到妈妈给的零花钱(300元)后,如果津津预计到这个月末还会多余100或者恰好100元,她就会把整百的钱存在妈妈那,剩余的钱留在自己手中。而存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。
请你根据一年内1月到12月每个月津津的预算,判断会不会出现预算不够的情况。如果不会,计算妈妈一年内帮津津存的钱加上其中20%还给津津后,津津手中会有多少钱。
例如:某月初津津手中剩余83元,津津预计这个月的花销是180元。妈妈给了津津300零花钱,津津会留下183(100 + 83)元,另外200元存在妈妈那。到了月末,津津会剩下3元。
输入格式:
12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。
输出格式:
一个整数。如果在某月中出现超预算,钱不够用的情况,输出-X,X表示出现这个情况的月份;否则输出到年末,津津手中会有多少钱。
题目分析:
这道题属于模拟、枚举。
输入和输出两次操作要分开,所以要用两次for,一次读入,一次处理。
因为不知道在第几月份时预算不够,所以要优先考虑月钱不够情况。
代码实现:
#include <iostream>
#include <cstring>
int main() {
int money = 0, x[12]; // 每月剩余的钱、每月预算
int balance = 0; // 存款
memset(x, 0, sizeof x / sizeof(int)); // 初始化数组, memset -> string.h
// 读入数据
for (int i = 0; i < 12; i++) {
std::cin >> x[i];
}
// 处理数据
for (int i = 0; i < 12; i++) {
int temp = 300;
// 预算不够
if (money + temp < x[i]) {
std::cout << - (i + 1);
return 0;
}
// 拿剩下的钱加上这个月末剩下的钱
money = money + temp - x[i];
// 若余钱大于等于一百,存入账内
while (money >= 100) {
money -= 100;
balance += 100;
}
}
// 因为12月底的余钱也算是存款,所以要加上
std::cout << balance * 1.2 + money;
return 0;
}
踩坑经验
我就是因为程序最后忘记加上余钱,一直WA。
直到去了讨论区才看出来。