1. 程式人生 > >銀行存款(C語言,遞推法)

銀行存款(C語言,遞推法)

題目: 母親為兒子sun 4年的大學生活準備了一筆存款,方式是整取零存,規定sun 每個月月底取下一個月的生活費。假設銀行年利息為1.71%,計算該母親每個月至少要存入多少錢?

演算法分析: 可採用逆推法分析存錢和取錢的過程,因為按照月為週期取錢,所以4年可以分為48個月,並對每個月進行計算。

遞推法

  1. 順推法:從已知條件出發,逐步推算出要解決問題的方法(例如斐波拉契數列)
  2. 逆推法:從已知的結果出發,用迭代表達式逐步推算出問題開始的條件。

假設第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]; 
}