HDU oj 2048 錯排問題

2022-06-12 07:24:09 字數 1268 閱讀 7632

problem description

hdu 2006'10 acm contest的頒獎晚會隆重開始了!

為了活躍氣氛,組織者舉行了乙個別開生面、獎品豐厚的**活動,這個活動的具體要求是這樣的:

首先,所有參加晚會的人員都將一張寫有自己名字的字條放入**箱中;

然後,待所有字條加入完畢,每人從箱中取乙個字條;

最後,如果取得的字條上寫的就是自己的名字,那麼「恭喜你,中獎了!」

大家可以想象一下當時的氣氛之熱烈,畢竟中獎者的獎品是大家夢寐以求的twins簽名照呀!

不過,正如所有試圖設計的喜劇往往以悲劇結尾,這次**活動最後竟然沒有乙個人中獎!

我的神、上帝以及老天爺呀,怎麼會這樣呢?

不過,先不要激動,現在問題來了,你能計算一下發生這種情況的概率嗎?

不會算?難道你也想以悲劇結尾?!

input

輸入資料的第一行是乙個整數c,表示測試例項的個數,然後是c 行資料,每行包含乙個整數n(1

output

對於每個測試例項,請輸出發生這種情況的百分比,每個例項的輸出佔一行, 結果保留兩位小數(四捨五入),

具體格式請參照sample output。

sample input12

sample output

50.00%

分析:錯排問題(dn)

顯然d1

=0,d

2=1。

當n≥3時,不妨設n排在了第k位,其中k≠n,也就是1≤k≤n-1。那麼我們現在考慮第n位的情況。

所以當n排在第k位時共有d

n-2+d

n-1種錯排方法,

又k有從1到n-1共n-1種取法,我們可以得到:

dn=(n-1)(dn-1+dn-2)

注意點:

1 #include2 #include3

using

namespace

std;45

long

long jc (inti)6

12int

main ()

1327

if(m==1

)28 cout<2)<"%"

<30else

if(m==2

)31 cout<2)<<"

50.00%

"<33else

34 cout<2)<1.0)*100

<<"%"

<37return0;

38 }

錯排問題 hdu2048

錯排問題 問題 十本不同的書放在書架上。現重新擺放,使每本書都不在原來放的位置。有幾種擺法?這個問題推廣一下,就是錯排問題,是組合數學中的問題之一。考慮乙個有n個元素的排列,若乙個排列中所有的元素都不在自己原來的位置上,那麼這樣的排列就稱為原排列的乙個錯排。n個元素的錯排數記為d n 研究乙個排列錯...

杭電2048錯排問題

首先分析題目,題目中要求計算出沒有乙個人獲獎的概率,即所有人全部錯排的情況除於所有可能的情況 然後,在這裡,重點分析錯排情況共有多少種的演算法 首先考慮,如果有n 1個人,並且這n 1個人已經完成了完全錯排,則有f n 1 種可能,那麼,現在又來了乙個人 那麼後來的第n個人可以通過用自己的姓名牌去和...

錯排問題 hdu2048

n個有序的元素有n 種排列方式,如果乙個排列使得所有元素都不在原來的位置上的排列就叫錯排。1 錯排有兩種方法進行計算,一種是基於容斥定理最後得出來的乙個階乘的計算式,計算機對於階乘非常的不友好,因此第一種很少使用。2 由於階乘的原因,我們不得不再尋找一種計算錯排dn的方法。首先我們以1,2,3,4的...