錯排和printf輸出%

錯排就是全錯排序的意思:
首先需要知道在n個數中選出m個使其錯排的可能,也就是高中數學的C(n,m);其次是這m個數全部錯排的方法數。
錯排問題是有自己的公式的,也就是f(n)=(n-1)*[f(n-1)+f(n-2)].接下來就是有趣的證明:

首先考慮,如果開始有n-1個新郎,並且這n-1個人都已經完成了錯排(有f(n-1)種可能),現在又來了一個人,那麼後來的第n個人可以通過用自己的新娘去和那n-1個人中的任意一個交換,來實現n個人都錯排。這種情況有(n-1)*f[n-1]種可能;
另外,如果開始的n-1個人不是都錯排,那麼要想使第n個人過來與其中一個交換後實現錯排的話就必須滿足兩個條件:
1.那n-1個人中只有一個人選到了自己的新娘,也就是說有n-2個人都已經錯排了。
2.第n個人必須和那個選到自己新娘的人去交換,但那個選到自己新娘的人可以是n-1個人中的任意一個。這種情況有(n-1)*f[n-2]種可能。
其他情況都不能滿足n個人錯排。
因此遞推關係:f[n]=(n-1)*(f[n-1]+f[n-2])

用printf輸出%的方法:printf(“%%”);百分號控制輸出格式,因此連續兩個百分號就可以輸出百分號了。
真好o(^▽^)o

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章