码迷,mamicode.com
首页 > 其他好文 > 详细

⑨要写信

时间:2016-03-26 10:39:39      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

【题目描述】

某日,琪露诺写了N封信要装到N个信封里面,却全都装错了……现在想知道有多少种装错的可能性。

【输入描述】
信和信封的数量N。

【输出描述】
装错的可能性的数量。

【样例输入】
输入样例1

2

 

输入样例2

4

【样例输出】
输出样例1

1

 

输出样例2

9

【数据范围及提示】
1≤N≤100

源代码:

#include<cstdio>
int n,f[101];
int main()
{
    scanf("%d",&n);
    f[1]=0;
    f[2]=1;
    for (int a=3;a<=n;a++)
      f[a]=(a-1)*(f[a-1]+f[a-2]); //应用了错排公式。
    printf("%d",f[n]); //本题还应使用高精度算法,但在此忽略。
    return 0;
}

/*
数论——《错排公式》:
 
    f[n]=(n-1)*(f[n-1]+f[n-2])

  Step 1:
    把第n个元素放在任意的一个位置,例如位置k(除位置n外)。
  Step 2:
    放置第k个元素无非为以下两种可能:
    (1)放置在位置n: 
        则剩下的(n-2)个元素就有f(n-2)种放置方法。
    (2)不放置在位置n:
        则剩下的(n-2)个元素就有f(n-1)种放置方法。
*/

⑨要写信

标签:

原文地址:http://www.cnblogs.com/Ackermann/p/5322003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!