【例题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;
}
posted @ 2021-07-11 21:47  Juro  阅读(85)  评论(0编辑  收藏  举报