P1089津津的儲蓄計劃
阿新 • • 發佈:2018-11-28
題目描述
津津的零花錢一直都是自己管理。每個月的月初媽媽給津津300300元錢,津津會預算這個月的花銷,並且總能做到實際花銷和預算的相同。
為了讓津津學習如何儲蓄,媽媽提出,津津可以隨時把整百的錢存在她那裡,到了年末她會加上20\%20%還給津津。因此津津制定了一個儲蓄計劃:每個月的月初,在得到媽媽給的零花錢後,如果她預計到這個月的月末手中還會有多於100100元或恰好100100元,她就會把整百的錢存在媽媽那裡,剩餘的錢留在自己手中。
例如1111月初津津手中還有8383元,媽媽給了津津300300元。津津預計1111月的花銷是180180元,那麼她就會在媽媽那裡存200200元,自己留下183183元。到了1111月月末,津津手中會剩下33元錢。
津津發現這個儲蓄計劃的主要風險是,存在媽媽那裡的錢在年末之前不能取出。有可能在某個月的月初,津津手中的錢加上這個月媽媽給的錢,不夠這個月的原定預算。如果出現這種情況,津津將不得不在這個月省吃儉用,壓縮預算。
現在請你根據2004年1月到12月每個月津津的預算,判斷會不會出現這種情況。如果不會,計算到2004年年末,媽媽將津津平常存的錢加上20%還給津津之後,津津手中會有多少錢。
輸入輸出格式
輸入格式:
1212行資料,每行包含一個小於350350的非負整數,分別表示11月到1212月津津的預算。
輸出格式:
一個整數。如果儲蓄計劃實施過程中出現某個月錢不夠用的情況,輸出-X−X,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)); } }