1. 程式人生 > >P1089津津的儲蓄計劃

P1089津津的儲蓄計劃

題目描述

津津的零花錢一直都是自己管理。每個月的月初媽媽給津津300300元錢,津津會預算這個月的花銷,並且總能做到實際花銷和預算的相同。

為了讓津津學習如何儲蓄,媽媽提出,津津可以隨時把整百的錢存在她那裡,到了年末她會加上20\%20%還給津津。因此津津制定了一個儲蓄計劃:每個月的月初,在得到媽媽給的零花錢後,如果她預計到這個月的月末手中還會有多於100100元或恰好100100元,她就會把整百的錢存在媽媽那裡,剩餘的錢留在自己手中。

例如1111月初津津手中還有8383元,媽媽給了津津300300元。津津預計1111月的花銷是180180元,那麼她就會在媽媽那裡存200200元,自己留下183183元。到了1111月月末,津津手中會剩下33元錢。

津津發現這個儲蓄計劃的主要風險是,存在媽媽那裡的錢在年末之前不能取出。有可能在某個月的月初,津津手中的錢加上這個月媽媽給的錢,不夠這個月的原定預算。如果出現這種情況,津津將不得不在這個月省吃儉用,壓縮預算。

現在請你根據2004年1月到12月每個月津津的預算,判斷會不會出現這種情況。如果不會,計算到2004年年末,媽媽將津津平常存的錢加上20%還給津津之後,津津手中會有多少錢。

輸入輸出格式

輸入格式:

 

1212行資料,每行包含一個小於350350的非負整數,分別表示11月到1212月津津的預算。

 

輸出格式:

 

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

注意,洛谷不需要進行檔案輸入輸出,而是標準輸入輸出。

說明:

這道題目看似很簡單,但是有很多需要注意的地方,很容易寫成下面的這種程式碼:

 

#include <iostream>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>

using namespace std ;

int main(){
    int month ;
    int left_per_month = 0 ;
    
int save = 0 ; int check = -1 ; //記錄當上述第三種情況出現時的月份。 bool first = true ; //是否第一次出現上述第三種情況。 for ( month = 1 ; month <= 12 ; month ++ ){ int budget_per_month ; cin >> budget_per_month ; int index = 300 - budget_per_month + left_per_month ; if (index >= 100){ save += index / 100 * 100 ; left_per_month = index - index / 100 * 100 ; }else if (index < 100 && index >= 0){ left_per_month = index ; }else if (index < 0 && first){ first = false ; check = month ; } } if (check != -1){ cout << -1 * check ; }else{ //**輸出到2004年年末津津手中會有多少錢** 題目原句,所以得加上最後一個月的結餘。 cout << save * (1 + 0.2) + left_per_month ; } return 0 ; }

實際上理解清楚了:就是下面的程式碼:很簡潔

package select.squnence;

import java.util.Scanner;

public class P1089 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int total=0;int current=0;int i;
        for ( i = 1; i <= 12; ++i) {
            int x=in.nextInt();
            current+=300-x;
            if(current<0) {
                System.out.println("-"+i);
                break;
            }
            if(current>=200) {total+=200;current-=200;}
            if(current>=100) {total+=100;current-=100;}
        }
        if(i==13)System.out.println((int)(total*1.2+current));
    }
}