题目地址:
https://www.luogu.com.cn/problem/P1089
题目描述:
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津
300
300
300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上
20
%
20\%
20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于
100
100
100元或恰好
100
100
100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。例如
11
11
11月初津津手中还有
83
83
83元,妈妈给了津津
300
300
300元。津津预计
11
11
11月的花销是
180
180
180元,那么她就会在妈妈那里存
200
200
200元,自己留下
183
183
183元。到了
11
11
11月月末,津津手中会剩下
3
3
3元钱。津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。现在请你根据
2004
2004
2004年
1
1
1月到
12
12
12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到
2004
2004
2004年年末,妈妈将津津平常存的钱加上
20
%
20\%
20%还给津津之后,津津手中会有多少钱。
输入格式:
12
12
12行数据,每行包含一个小于
350
350
350的非负整数,分别表示
1
1
1月到
12
12
12月津津的预算。
输出格式:
一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出
−
X
-X
−X,
X
X
X表示出现这种情况的第一个月;否则输出到
2004
2004
2004年年末津津手中会有多少钱。注意,洛谷不需要进行文件输入输出,而是标准输入输出。
代码如下:
#include <iostream>
using namespace std;
int main() {
int cur = 0, save = 0, res = 0;
for (int i = 1; i <= 12; i++) {
int x;
cin >> x;
cur += 300 - x;
if (cur < 0) {
res = -i;
break;
}
save += cur / 100 * 100;
cur -= cur / 100 * 100;
}
if (!res) printf("%d\n", cur + save * 120 / 100);
else printf("%d\n", res);
return 0;
}
时空复杂度 O ( 1 ) O(1) O(1)。