Vijos.1096 津津的儲蓄計劃

試題請參見: https://vijos.org/p/1096

題目概述

津津的零花錢一直都是自己管理。每個月的月初媽媽給津津300元錢,津津會預算這個月的花銷,並且總能做到實際花銷和預算的相同。 
爲了讓津津學習如何儲蓄,媽媽提出,津津可以隨時把整百的錢存在她那裏,到了年末她會加上20%還給津津。因此津津制定了一個儲蓄計劃:每個月的月初,在得到媽媽給的零花錢後,如果她預計到這個月的月末手中還會有多於100元或恰好100元,她就會把整百的錢存在媽媽那裏,剩餘的錢留在自己手中。 
例如11月初津津手中還有83元,媽媽給了津津300元。津津預計11月的花銷是180元,那麼她就會在媽媽那裏存200元,自己留下183元。到了11月月末,津津手中會剩下3元錢。 
津津發現這個儲蓄計劃的主要風險是,存在媽媽那裏的錢在年末之前不能取出。有可能在某個月的月初,津津手中的錢加上這個月媽媽給的錢,不夠這個月的原定預算。如果出現這種情況,津津將不得不在這個月省吃儉用,壓縮預算。 
現在請你根據2004年1月到12月每個月津津的預算,判斷會不會出現這種情況。如果不會,計算到2004年年末,媽媽將津津平常存的錢加上20%還給津津之後,津津手中會有多少錢。

輸入

輸入包括12行數據,每行包含一個小於350的非負整數,分別表示1月到12月津津的預算。

輸出

輸出包括一行,這一行只包含一個整數。如果儲蓄計劃實施過程中出現某個月錢不夠用的情況,輸出-X,X表示出現這種情況的第一個月;否則輸出到2004年年末津津手中會有多少錢。

解題思路

難得我也會覺得一道題目水. 這道題就是超級簡單的模擬題.

遇到的問題

評測機貌似有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;
}
發佈了50 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章