當n個編號元素放在n個編號位置,元素編號與位置編號各不對應的方法數用m(n)表示,那麼m(n-1)就表示n-1個編號元素放在n-1個編號位置,各不對應的方法數,其它類推。第一步,把第n個元素放在乙個位置,比如位置k,一共有n-1種方法;
第二步,放編號為k的元素,這時有兩種情況.
1,把它放到位置n,那麼,對於剩下的n-2個元素,就有m(n-2)種方法;
2,不把它放到位置n,這時,對於這n-1個元素,有m(n-1)種方法;
綜上得到 m(n)=(n-1)[m(n-2)+m(n-1)]
nowcoder每天要給很多人發郵件。有一天他發現發錯了郵件,把發給a的郵件發給了b,把發給b的郵件發給了a。於是他就思考,要給n個人發郵件,在每個人僅收到1封郵件的情況下,有多少種情況是所有人都收到了錯誤的郵件?即沒有人收到屬於自己的郵件。
此題,就相當於讓我們求解n個元素都有對應的標好,求解每一元素不在自己對應標號的情況有多少種,因此我們可以利用錯排公式,進行遞迴解決這個問題;而我們的終止條件是,當只有乙個元素的時候,我們不可能會放錯,當有兩個元素的時候,我們放錯的情況只有一種;
#includeusing namespace std;
long long fun(int n)
int main()
//利用錯排公式,求解n個人全部拿的不是自己名字的紙條的情況總數
vectorv(n+1,0);
v[1]=0;
v[2]=1;
for(int i=3;i<=n;++i)
//輸出無人獲獎的概率
printf("%.2f%%\n",100.0*v[n]/ret);
}return 0;
}
遞迴 錯排公式
這個問題推廣一下,就是錯排問題,是組合數學中的問題之一。考慮乙個有n個元素的排列,若乙個排列中所有的元素都不在自己原來的位置上,那麼這樣的排列就稱為原排列的乙個錯排。n個元素的錯排數記為d n 研究乙個排列錯排個數的問題,叫做錯排問題或稱為更列問題。錯排問題最早被尼古拉 伯努利和尤拉研究,因此歷史上...
數論 錯排公式
1.定義 乙個有n個元素的排列,若乙個排列中所有的元素都不在自己原來的位置上,那麼這樣的排列就稱為原排列的乙個錯排。n個元素的錯排數記為d n 2.推導 遞推 首先將第乙個元素錯排,假設將第乙個元素放到第k位,那麼對於第k位的元素,有兩種情況 1.k放在第1位,此時相當於對處第1位與第k位的n 2個...
錯排公式詳解
在hdu刷題時遇到了關於錯排公式的一些問題。本篇文章將詳細解釋錯排公式的推導過程。錯排的定義 一段序列中一共有n個元素,那麼可知這些元素一共有n 種排列方法。假如在進行排列時,原來所有的元素都不在原來的位置,那麼稱這個排列為錯排。而錯排數所指的就是在一段有n個元素的序列中,有多少種排列方式是錯排。遞...