错排问题(递推)

错排问题

题目描述
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,请大家支持和点赞,谢谢

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务