【例题1】错排问题
【例题1】错排问题
题面
题目描述
求多少个 \(n\) 个数的排列 \(A\),满足对于任意的 \(i\) (\(1 \leq i \leq n\)) \(A_i \neq i\)。
输入格式
一个整数 \(n\)。
输出格式
一个整数,表示答案。
样例
输入样例
2
输出样例
1
数据范围与提示
对于 \(100\%\) 的数据,\(1\leq n\leq 20\)。
分析
错排公式:\(f_n=(n-1)\times(f_{n-1}+f_{n-2})\)
emm,错排公式都有了,不会还不知道吧
Code
#include <bits/stdc++.h>
using namespace std;
int n;
int f[30];
int main(void) {
f[1] = 0;
f[2] = 1;
cin >> n;
for (int i = 3; i <= n; ++i)
f[i] = (i - 1) * (f[i - 1] + f[i - 2]);
cout << f[n];
return 0;
}