洛谷 P1595 信封问题(周五杂题选讲)(错排公式)

题目描述

某人写了n封信和n个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。

输入输出格式

输入格式:

 

一个信封数n(n<=20)

 

输出格式:

 

一个整数,代表有多少种情况。

题解

本题即为伯努利信封问题

360百科:错排公式

STD

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n;
 4 int b(int n)
 5 {
 6     if (n==1) return 0;
 7     else if (n==2) return 1;
 8     else return (n-1)*(b(n-1)+b(n-2));
 9 }
10 int main()
11 {
12     ios::sync_with_stdio(false);
13     cin>>n;
14     cout<<b(n);
15     return 0;
16 }

 

然而这题范围只有二十...

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n;
 4 int main(){
 5     cin>>n;
 6     if(n==1){
 7         cout<<0;
 8         return 0;
 9     }
10     if(n==2){
11         cout<<1;
12         return 0;
13     }
14     if(n==3){
15         cout<<2;
16         return 0;
17     }
18     if(n==4){
19         cout<<9;
20         return 0;
21     }
22     if(n==5){
23         cout<<44;
24         return 0;
25     }
26     if(n==6){
27         cout<<265;
28         return 0;
29     }
30     if(n==7){
31         cout<<1854;
32         return 0;
33     }
34     if(n==8){
35         cout<<14833;
36         return 0;
37     }
38     if(n==9){
39         cout<<133496;
40         return 0;
41     }
42     if(n==10){
43         cout<<1334961;
44         return 0;
45     }
46     if(n==11){
47         cout<<14684570;
48         return 0;
49     }
50     if(n==12){
51         cout<<176214841;
52         return 0;
53     }
54     if(n==13){
55         cout<<2290792932;
56         return 0;
57     }
58     if(n==14){
59         cout<<32071101049;
60         return 0;
61     }
62     if(n==15){
63         cout<<481066515734;
64         return 0;
65     }
66     if(n==16){
67         cout<<7697064251745;
68         return 0;
69     }
70     if(n==17){
71         cout<<130850092279664;
72         return 0;
73     }
74     if(n==18){
75         cout<<2355301661033953;
76         return 0;
77     }
78     if(n==19){
79         cout<<44750731559645106;
80         return 0;
81     }
82     if(n==20){
83         cout<<895014631192902121;
84         return 0;
85     }
86 }

 

不要问我第二段从哪来的,我是打出STD后CV大法搞出来的...

 

转载于:https://www.cnblogs.com/Alarak26/p/8535493.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值