銀行存款(C語言,遞推法)
阿新 • • 發佈:2018-12-21
題目: 母親為兒子sun 4年的大學生活準備了一筆存款,方式是整取零存,規定sun 每個月月底取下一個月的生活費。假設銀行年利息為1.71%,計算該母親每個月至少要存入多少錢?
演算法分析: 可採用逆推法分析存錢和取錢的過程,因為按照月為週期取錢,所以4年可以分為48個月,並對每個月進行計算。
遞推法
- 順推法:從已知條件出發,逐步推算出要解決問題的方法(例如斐波拉契數列)
- 逆推法:從已知的結果出發,用迭代表達式逐步推算出問題開始的條件。
假設第48個月後sun大學畢業連本帶息要取666元,則要求第47個月銀行的存錢金額為: 第47個月月末存款 = 666/(1+0.0172/12); 第46個月月末存款 = (第47個月月末存款+666)/(1+0.0172/12); 第45個月月末存款 = (第46個月月末存款+666)/(1+0.0172/12); ……. 第2個月月末存款 = (第3個月月末存款+666)/(1+0.0172/12); 第1個月月末存款 = (第2個月月末存款+666)/(1+0.0172/12); 母親存款金額 = (第1個月末存款+666)/(1+0.0172/12);
顯而易見,程式碼的核心就是這迭代式(用迴圈很好實現)
#include<iostream> using namespace std; #define deposit 1000 #define rate 0.0171 int main(){ double a[49]; //分別存放母親的存款和48個月的月末存款 a[48] = (double)deposit; for(int i = 47;i >= 0;i--){ a[i] = (a[i+1] + deposit)/(1 + rate/12); } cout<<"母親的存款是:"<<a[0]; }