首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言窮舉法解「6支筆錯蓋筆帽」排列組合問題:遞歸公式 D(n)=(n-1)[D(n-1)+D(n-2)]

     編輯:程式設計綜合問答

題目:6支筆身筆帽顏色一一對應,求全部錯蓋(錯排)的排列數。選項:265/266/267/268。

數學模型:錯排數 Derangement

遞歸公式:
D(1)=0, D(2)=1
D(n) = (n-1) * [D(n-1) + D(n-2)] (n≥3)

逐步計算

nD(n)計算過程
10基例
21基例
322*(1+0)=2
493*(2+1)=9
5444*(9+2)=44
62655*(44+9)=265

答案:**A. 265**

C 語言遞歸實現

int derangement(int n) {
    if (n == 1) return 0;
    if (n == 2) return 1;
    return (n-1) * (derangement(n-1) + derangement(n-2));
}
// 主函數調用 derangement(6) 輸出 265

迭代優化(O(n)時間 O(1)空間)

int derangement_iter(int n) {
    if (n == 1) return 0;
    if (n == 2) return 1;
    int d1 = 0, d2 = 1, dn;
    for (int i = 3; i <= n; i++) {
        dn = (i-1) * (d2 + d1);
        d1 = d2;
        d2 = dn;
    }
    return d2;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved