有 2n 的乙個長方形方格,用乙個12 的骨牌鋪滿方格;
編寫乙個程式,試對給出的任意乙個n(n>0), 輸出鋪法總數。
【演算法分析】
(1)當n=1時,
只能是一種鋪法,鋪法總數有示為x1=1。
(2)當n=2時:
骨牌可以兩個並列豎排,也可以並列橫排,再無其他方法,如下左圖所示,因此,鋪法總數表示為x2=2
(3)當n=3時:
4)推出一般規律:對一般的n,要求xn可以這樣來考慮,
若第乙個骨牌是豎排列放置,
剩下有n-1個骨牌需要排列,這時排列方法數為xn-1;
若第乙個骨牌是橫排列,
整個方格至少有2個骨牌是橫排列(1*2骨牌),因此剩下n-2個骨牌需要排列,這是骨牌排列方法數為xn-2。
從第一骨牌排列方法考慮,只有這兩種可能,所以有:
f(n)=f(n-1)+f(n-2) (n>2)
f(1)=1 ;
f(2)=2 ;
**如下:
#include
using
namespace std;
intmain()
}
科學家在熱帶森林中發現了一種特殊的昆蟲,這種昆蟲的繁殖能力很強。
每對成蟲過x個月產y對卵,每對卵要過兩個月長成成蟲。
假設每個成蟲不死,第乙個月只有一對成蟲,且卵長成成蟲後的第乙個月不產卵(過x個月產卵).
問過z個月以後,共有成蟲多少對?0=分析:
每個月都有成蟲產卵。
蟲卵經過兩個月才能變成成蟲,產卵。
每個月的成蟲數量是?
由前上個月的成蟲和兩個月之前的蟲卵數量計算
每個月的蟲卵是由i-x個月的成蟲決定(i是當前月份。為什麼不是上個月的成蟲?)
定義陣列f,f[i]表示第i月昆蟲成蟲的數量
新增乙個輔助陣列b,b[i]表示第i月的卵的數目,從而得到兩個公式:
b[i] = f[i - x] * y; (成蟲經過x月產卵 y對)
f[i] = f[i - 1] + b[i - 2]; (卵經過2個月長成成蟲)
**如下:
#include
using
namespace std;
intmain()
,b[101]=
0,i,j,x,y,z;
cin>>x>>y>>z;
for(i=
1;i<=x;i++
)for
(i=x+
1;i<=x+
1;i++
) cout<
<
return0;
}
在所有的n位數中,有多少個數中有偶數個數字3(說明,0是偶數)?
【輸入格式】 讀入乙個數n
【輸出格式】 輸出有多少個數中有偶數個數字3。
【輸入樣例】 2
【輸出樣例】 73(由於 位數 比較大的情況下,導致輸出資料可能越界,因此,輸出個數 % 12345 的結果)
【資料規模】 1<=n<=1000
分析
任何位的數中,根據3的個數不同,分為兩類
或者偶數字的3,或者包含 奇數字的3
1位數中(共10個數)
0,1,2,3,4,5,6,7,8,9,
包含0個3的數有 9個
包含1個3的數有1個
2位數中(90個 10~99)
包含偶數個3的數有 0個3+2個=89+11=72
包含奇數個3的數有 1個3= 9*1
【演算法分析】
前i位有偶數個3,必須滿足以下條件:
前i-1位有偶數個3, 則 第i位不能取3
前i-1位有奇數個3,則第i位必須取3
可以用f[i][0]表示前i位取偶數個3有幾種情況,
f[i][1]表示前i位取奇數個3有幾種情況。
則遞推公式可以表示為:
f[i][0] =f[i-1][0]*9+f[i-1][1]; (9:除3 外的每乙個數)
f[i][1] =f[i-1][0] + f[i-1][1]*9; (9:除3 外的每乙個數字)
邊界條件: f[1][1]=1;f[1][0]=9;
**如下:
#include
using
namespace std;
intmain()
cout<
];return0;
}
演算法筆記2 遞推演算法
演算法特點 乙個問題的求解需一系列的計算,在已知條件和所求問題之間總存在著某種相互聯絡的關係,在計算時,如果可以找到前後過程之間的數量關係 即遞推式 那麼,從問題出發逐步推到已知條件,此種方法叫逆推。無論順推還是逆推,其關鍵是要找到遞推式。例1 數字三角形。如下所示為乙個數字三角形。請編乙個程式計算...
遞推演算法二
b align center size medium 遞推演算法二 冪積數列 size align b size medium b 冪積數列 b m 輸入整數n,m求小於n的按從小到大的第m個元素 分析 list b 窮盡法 b 從2開始到n,如果n 2 0,n n 2一直迴圈的直到不能除盡 n 3...
遞推演算法(初學)
遞推演算法 乙個問題的求解需一系列 類似重複 的計算,在已知條件和所求問題之間總存在著某種相互聯絡的關係。通過已知條件,利用特定關係得出中間推論,直至得到結果的演算法。在解決問題的時候,去尋找前後過程之間的數學關係 即遞推式 遞推演算法避開了求項公式的麻煩,把乙個複雜的問題的求解,分解成了連續的若干...