3 參考**
發郵件時間限制 1000 ms 記憶體限制 32768 kb **長度限制 100 kb 判斷程式 standard (來自 小小)
題目描述
nowcoder每天要給很多人發郵件。有一天他發現發錯了郵件,把發給a的郵件發給了b,把發給b的郵件發給了a。於是他就思考,要給n個人發郵件,在每個人僅收到1封郵件的情況下,有多少種情況是所有人都收到了錯誤的郵件?
即沒有人收到屬於自己的郵件。
輸入描述:
輸入包含多組資料,每組資料報含乙個正整數n(2≤n≤20)。
輸出描述:
對應每一組資料,輸出乙個正整數,表示無人收到自己郵件的種數。
輸入例子:23
輸出例子:12
錯排問題
錯排問題,推導如下,
若前n-1個數已經滿足錯排,現考慮第n個數:
(1)第n個數可以和前n-1個中任意乙個數互換,結果仍然是錯排,所以有(n-1)*d(n-1)種;
(2)第n個數可以放到前n-1任意乙個位置,但是原來位置的數不能放到最後,
則其只可以能放在其他n-2個位置,並且保證這n-2的位置是錯排,所以有(n-1)*d(n-2)
綜上,一共有 d(n) =(n-1)*(d(n-1)+d(n-2))
例如:經典的裝錯信封問題
用a、b、c……表示寫著n位友人名字的信封,a、b、c……表示n份相應的寫好的信紙。把錯裝的總數為記作d(n)。假設把a錯裝進b裡了,包含著這個錯誤的一切錯裝法分兩類:
(1)b裝入a裡,這時每種錯裝的其餘部分都與a、b、a、b無關,應有d(n-2)種錯裝法。
(2)b裝入a、b之外的乙個信封,這時的裝信工作實際是把(除a之外的)n-1份信紙b、c……裝入(除b以外的)n-1個信封a、c……,顯然這時裝錯的方法有d(n-1)種。
總之在a裝入b的錯誤之下,共有錯裝法d(n-2)+d(n-1)種。
a裝入c,裝入d……的n-2種錯誤之下,同樣都有d(n-1)+d(n-2)種錯裝法,因此d(n)=(n-1)[d(n-1)+d(n-2)]
因此得錯排公式:d(n)=(n-1)[d(n-1)+d(n-2)],d[0] = 1,d[1] = 0,d[2] = 1。
#include
#include
typedef
long
long ll;
const
int maxn =21;
ll f[maxn]=;
intmain()
while(~
scanf
("%d"
,&n)
)return0;
}
牛客題解 發郵件錯排問題
nowcoder每天要給很多人發郵件。有一天他發現發錯了郵件,把發給a的郵件發給了b,把發給b的郵件發給了a。於是他就思考,要給n個人發郵件,在每個人僅收到1封郵件的情況下,有多少種情況是所有人都收到了錯誤的郵件?即沒有人收到屬於自己的郵件。他給的測試用例和輸入輸出描述是這樣的 n個郵件放入n個郵箱...
jenkins發郵件問題
1 傳送郵件不成功 sending e mails to cn finished failure 解決辦法 jenkins configure global security 找到防止跨站點請求偽造,將前面的勾去掉,再次嘗試 2 jenkins中設定代發郵件的郵箱 jenkins 系統管理 系統設定...
python 發郵件 python發郵件
python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。這是乙個簡單的語法,用來建立乙個smtp物件,稍後將演示如何用它來傳送電子郵件 import smtplib smtpobj smtplib.smtp ...