不容易系列之一

来源:互联网 发布:光环大数据和达内 编辑:程序博客网 时间:2024/06/05 07:21

典型的错排问题:

1、当N=1和2时,易得解~,假设F(N-1)和F(N-2)已经得到,重点分析下面的情况:
2、当有N封信的时候,前面N-1封信可以有N-1或者 N-2封错装
3、前者,对于每种错装,可从N-1封信中任意取一封和第N封错装,故=F(N-1)*(N-1)
4、后者简单,只能是没装错的那封和第N封交换信封,没装错的那封可以是前面N-1封中的任意一个,故

等于 F(N-2) * (N-1)

错排公式: 基本形式:d[1]=0;   d[2]=1
递归式:d[n]= (n-1)*( d[n-1] + d[n-2])

#include<stdio.h>
int main()
{
 int n,i;
 __int64 a[25];
 a[2]=1;a[3]=2;
 for(i=4;i<=21;i++)
  a[i]=(i-1)*(a[i-1]+a[i-2]);
 while(scanf("%d",&n)!=EOF)
  printf("%I64d\n",a[n]);
 return 0;
}

0 0
原创粉丝点击