现在的位置: 首页 > 综合 > 正文

不容易系列之一

2013年08月26日 ⁄ 综合 ⁄ 共 1489字 ⁄ 字号 评论关闭
文章目录

前言

最近一直在学习概率论的一些基础知识,正好发现九度oj有到关于概率的题目,这里介绍一下,顺便普及一下经典的错排公式

错排公式

pala提出的问题:十本不同的书放在书架上.现在重新摆放,使每本书都不在原来放的位置,有几种摆法?这个问题推广一下,就是错排问题:n个有序元素应有n!种不同的排列,如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排.

推导错排公式

我们用f[n]表示第n个书架全部装错的方式.假设第n个书架装的是第k本书,而第m个书架装的是第n本书.我们按照k与m是否等值将总的错装方式分为两类:
  • 若k不等于m,交换m和n书架上的书,则n号书架上放的恰好是对的书,而m号书架错装了k号书架上的书.即除了n号书架其余n-1个书架全部装错,其错装方式等于f[n-1].又由于m有n-1个可能的取值,因此这类错装方式总数为(n - 1) * f[n - 1]
  • 若k等于m,交换m书架和n书架上的书后,n和m书架上的书均为正确的书.这样除n和m外的n-2个书架全部装错,其装错方式数量为f[n - 2].由于m有n-1种取值,这类错误方式为(n - 1) * f[n - 2]
  • 综上所述,f[n] = (n - 1) * f[n - 1] + (n - 1) * f[n - 2]

题目

题目描述:
大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!
做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。
话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的。比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做错了!大家都学过概率论,应该知道出现这种情况的概率,所以至今我都觉得这是一件神奇的事情。如果套用一句经典的评语,我们可以这样总结:一个人做错一道选择题并不难,难的是全部做错,一个不对。
不幸的是,这种小概率事件又发生了,而且就在我们身边:
事情是这样的——HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装错了信封!注意了,是全部装错哟!
现在的问题是:请大家帮可怜的8006同学计算一下,一共有多少种可能的错误方式呢?
输入:
输入数据包含多个多个测试实例,每个测试实例占用一行,每行包含一个正整数n(1<n<=20),n表示8006的网友的人数。
输出:
对于每行输入请输出可能的错误方式的数量,每个实例的输出占用一行。
样例输入:
2
3
样例输出:
1
2

AC代码

#include <stdio.h>
#include <stdlib.h>
 
void errorFormula(int n)
{
    long long int f[21];
    int i;
 
    f[1] = 0;
    f[2] = 1;
 
    for (i = 3; i <= n; i ++) {
        f[i] = (i - 1) * f[i - 1] + (i - 1) * f[i - 2];
    }
 
    printf("%lld\n", f[n]);
}
 
int main(void)
{
    int n;
 
    while (scanf("%d", &n) != EOF) {
        errorFormula(n);
    }
 
    return 0;
}
/**************************************************************
    Problem: 1451
    User: wangzhengyi
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:912 kb
****************************************************************/

抱歉!评论已关闭.