错排公式

题目:某人写了n封信和n个信封,如果所有的信都装错了信封。求所有的信都装错信封共有多少种不同情况。

分析:这里要用到错排公式,即(n-1)(F(n-1)+F(n-2))。有n-1封或n-2封放错,其中n-1封放错对应将第N封同n-1封交换;而n-2封对应将没放错的一封和第N封交换,N可以使n-1中的任意一封。

#include<cstdio>
#include<cstdlib>
using namespace std;
int let(int n)
{
    if(n==1)return 0;
    if(n==2)return 1;
    return (n-1)*(let(n-1)+let(n-2));
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n",let(n));
    return 0;
}

 

posted @ 2016-04-14 20:10  keshuqi  阅读(189)  评论(0编辑  收藏  举报