某人給6個朋友每人寫了一封信,同時寫了這6個朋友位址的信封,有多少種投放信箋的方法,使每封信與信封上的收信人都不相符?
#include
intmain()
}else t=0;
//第i封信在第i個信封,不滿足條件
if(t&&i==n)
//已經到最後一封信了,前面的信也都可以放到滿足條件的位上了
if(t&&i
//前面的信放到滿足條件的位上了,且還沒到最後一封信
while
(a[i]
==n&&i>0)
//第i封信已經試到最後乙個信封了,且i>0
i--;//調整或回溯,調整前面的信
if(i>
0) a[i]++;
//把第i封信位置前移
else
break
;//前面沒有信可以調位置了,break
}printf
("\n%d個整數全錯位排列共以上%ld個。\n"
,n,s)
;return0;
}
ps:在學習回溯法時,花了好久好久才明白程式的寫法,清楚每一步的意思。所以,在這裡對大部分**進行了說明,希望可以讓還在回溯法中迷路的小夥伴們能弄懂一些。可能有些地方的描述還不是很完善,唔,可以先去了解了解 皇后問題 的解法,再來理解這個可能會更清楚一些,它們是類似的。 關於伯努利數
主要是寫這個部落格用來記錄自然數冪和與伯努利數的關係 伯努利數定義如下 b 0 1 sum nb ic i 0 於是我們有了它的遞推式 b n frac sum b ic i 有乙個經常用的東西,用來求自然數冪和 s m n sum i m s m n frac sum c b i n 1 上面的式...
伯努利數學習筆記
定義伯努利數列 b n 滿足 b 0 1,sum nb i 0 n 0 可以發現定義式裡面包含了 b n 這一項,於是把 b n 提出來 b n sum b i n 1 b n sum b i b n frac sum b i 直接用定義式求是 o n 2 的複雜度 把定義式的迴圈上界減一,得 su...
學習筆記 伯努利數
b n n 0 frac 1 sum binom i b i 同時有 hat x sum b i frac frac x 所以可以使用多項式求逆求出伯努利數。設自然數冪和函式 s k n sum i k 那麼有 s k n frac 1 sum k binomi b i n 設 hat n x su...