错排问题
题目描述
Description
某人写了n封信和n个信封,如果所有的信都装错了信封。求所有的信都装错信封共有多少种不同情况。
Input
输入n(n <=20)
Output
输出情况总数
Sample Input
2
Sample Output
1
解题思路
这题就是求
n 个不同元素的错排问题,如1,2,3…n,i不在第i个位置的排列方法
试题难度
★☆☆☆☆
解题思路
这题经过推导,
可以得出错排的递归为(加法原理)————f(n)=(n-1)*(f(n-1)+f(n-2)) f(1)=0 f(2)=1
最后根据递归求出n的错排情况总数
想了解其他请查询————https://baike.so.com/doc/5600560-5813163.html
参考程序
#include<iostream>
using namespace std;
int n;
long long a[105]={0,0,1};//开头定义
int main()
{
cin>>n;
for(int i=3;i<=n;i++)
a[i]=(i-1)*(a[i-1]+a[i-2]);//调用递归式
cout<<a[n];
}
各位大佬,本蒟蒻初入CSDN,请大家支持和点赞,谢谢