三国佚事——巴蜀之危

题目描述

话说天下大势,分久必合,合久必分。。。却道那魏蜀吴三国鼎力之时,多少英雄豪杰以热血谱写那千古之绝唱。古人诚不我欺,确是应了那句“一将功成万骨枯”。 
是夜,明月高悬。诸葛丞相轻摇羽扇,一脸愁苦。原来是日前蜀国战事吃紧,丞相彻夜未眠,奋笔急书,于每个烽火台写下安排书信。可想,这战事多变,丞相运筹 帷幄,给诸多烽火台定下不同计策,却也实属不易。
谁成想这送信小厮竟投靠曹操,给诸葛丞相暗中使坏。这小厮将每封书信都投错了烽火台,居然没有一封是对的。不多时小厮便被抓住,前后之事却也明朗。这可急坏了诸葛丞相,这书信传错,势必会让蜀军自乱阵脚,不攻自破啊! 诸葛丞相现在想知道被这小厮一乱,这书信传错共有多少种情况。

输入

         题目有多组数据,处理到文件结尾,丞相共写了n(1 <= n <= 150)封书信,输入一个正数n。

输出

         输出书信传错的情况数。

示例输入

1
3
6

示例输出

0
2
265

提示

View Code
 1 include<stdio.h>
 2 int main()
 3 {
 4     int i, n  ;
 5     long long  f[160] ;
 6     while(scanf("%d",&n)!=EOF)
 7     {
 8         f[0] = 0 ;
 9         f[1] = 0 ;
10         f[2] = 1 ;
11         for(i=3; i<=n; i++)
12         {
13            f[i] = (i-1)*(f[i-1]+f[i-2]) ;
14         }
15         printf("%lld\n", f[n]) ;
16     }
17     return 0 ;
18 }

总结:这是错排问题,

当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.
第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;
第二步,放编号为k的元素,这时有两种情况⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有M(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法;
综上得到
M(n)=(n-1)[M(n-2)+M(n-1)]
特殊地,M⑴=0,M⑵=1
原文地址:https://www.cnblogs.com/yelan/p/2876970.html