题目描述
某人写了 �n 封信和 �n 个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。
输入格式
一个信封数 �n,保证 �≤20n≤20。
输出格式
一个整数,代表有多少种情况。
输入输出样例
输入 #1复制
2
输出 #1复制
1
输入 #2复制
3
输出 #2复制
2
说明/提示
对于 100%100% 的数据,1≤�≤201≤n≤20。
题解
#include <iostream>
using namespace std;
const int N = 30;
int n;
long f[N];
int main() {
scanf("%d", &n);
f[1] = 0, f[2] = 1;
for (int i = 3; i <= n; i++)
f[i] = (i - 1) * (f[i - 1] + f[i - 2]);
printf("%ld\n", f[n]);
}