码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-03-09 20:28:52      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:pac   题目   公式   输入输出格式   main   else   lan   ios   out   

题目描述

某人写了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大法搞出来的...

 

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

标签:pac   题目   公式   输入输出格式   main   else   lan   ios   out   

原文地址:https://www.cnblogs.com/ljp20021026/p/8535493.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!