發郵件 錯排問題

2021-10-03 09:53:04 字數 1320 閱讀 9506

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 ...