試題請參見: https://vijos.org/p/1096
題目概述
爲了讓津津學習如何儲蓄,媽媽提出,津津可以隨時把整百的錢存在她那裏,到了年末她會加上20%還給津津。因此津津制定了一個儲蓄計劃:每個月的月初,在得到媽媽給的零花錢後,如果她預計到這個月的月末手中還會有多於100元或恰好100元,她就會把整百的錢存在媽媽那裏,剩餘的錢留在自己手中。
例如11月初津津手中還有83元,媽媽給了津津300元。津津預計11月的花銷是180元,那麼她就會在媽媽那裏存200元,自己留下183元。到了11月月末,津津手中會剩下3元錢。
津津發現這個儲蓄計劃的主要風險是,存在媽媽那裏的錢在年末之前不能取出。有可能在某個月的月初,津津手中的錢加上這個月媽媽給的錢,不夠這個月的原定預算。如果出現這種情況,津津將不得不在這個月省吃儉用,壓縮預算。
現在請你根據2004年1月到12月每個月津津的預算,判斷會不會出現這種情況。如果不會,計算到2004年年末,媽媽將津津平常存的錢加上20%還給津津之後,津津手中會有多少錢。
輸入
輸出
解題思路
難得我也會覺得一道題目水. 這道題就是超級簡單的模擬題.
遇到的問題
評測機貌似有Bug, 我本地通過測試的代碼提交之後就WA.
看到有人說, 把
deposit * 1.2;
換成
<pre name="code" class="cpp"> deposit + <span style="font-family: Arial, Helvetica, sans-serif;">deposit / 5;</span>
就可以AC. 試了一下果然是這樣.
一定是評測機有問題.
我在Ubuntu 14.04 + gcc 4.8.2環境下運行所有測試點就可以AC.
源代碼
#include <iostream>
int main() {
const int NUMBER_OF_MONTHS = 12;
int expenses[NUMBER_OF_MONTHS] = {0};
// Input
for ( int i = 0; i < NUMBER_OF_MONTHS; ++ i ) {
std::cin >> expenses[i];
}
// Processing
int balance = 0, deposit = 0, month = 0;
for ( ; month < NUMBER_OF_MONTHS && balance >= 0; ++ month ) {
balance += 300;
balance -= expenses[month];
while ( balance > 100 ) {
deposit += 100;
balance -= 100;
}
}
// Output
if ( balance > 0 ) {
balance += deposit * 1.2;
std::cout << balance << std::endl;
} else {
std::cout << -month << std::endl;
}
return 0;
}