浅析错排问题

定义:n个有序的元素应有n!种不同的排列。如果一个排列使得所有的元素都不在原来的位置上,则称这个排列为错排。任给一个n,求出1,2,3,。。。,n的错排个数D为多少,并且给出所有的错排方案

推理:

第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;

第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有D(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有D(n-1)种方法;

so:

D(n)=(n-1)*[D(n-1)+D(n-2)];

D(1)=0,D(2)=1

e.g

Oh, my God!

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述
In order to happy everyone, organizer HRW held an open up partythere have specific requirements for this activity is this:

First of all, all person in the party will have to write a note to his name into the box;Then, after all the note added is completed, each taking a note from the box;Finally, if made note of your name, then "Congratulations, won the party!"

Oh, my God!

Now to the question, you can calculate the probability of this happening?Don‘t count? Don‘t you want said by others as a  DouBi?!  AC it!

输入
Input file contains several test cases. Each test case consists of a integer numbers n on a line(one≤n≤ten ).The last test case is followed by a line that contains one zeroes. This line must not be processed.
输出
print the the probability

See the following example.

样例输入
2
3
0
样例输出
Case [1]: 50.00%.
Case [2]: 33.33%.
提示
要用到错排公式,计算所有人都抽到自己名字的概率
来源
原创
上传者
ACM_贺荣伟

题目翻译:首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;

然后,待所有字条加入完毕,每人从箱中取一个字条;

最后,如果取得的字条上写的就是自己的名字,那么“恭喜你,中奖了!”

求计算一下发生这种情况的概率吗?

思路:其实就错排公式的运用

p=D(n)/n!;

#include<stdio.h>
int main()
{
    double a[55];
    double b[55];
    a[0]=1;
    for(int i=1;i<=22;i++)
        a[i]=a[i-1]*i;
    b[1]=0;
    b[2]=1;
    b[3]=2;
    for(int i=4;i<=22;i++)
        b[i]=(i-1)*(b[i-1]+b[i-2]);
        int n,d=1;
    while(~scanf("%d",&n),n)
    {
        printf("Case [%d]: ",d++);
        if(n==1)
            printf("100.00%%.\n");
        else
        {
            printf("%.2lf%%.\n",100*b[n]/a[n]);
        }
    }
}

时间: 2024-08-08 09:40:30

浅析错排问题的相关文章

BZOJ 4517: [Sdoi2016]排列计数 错排+逆元

4517: [Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 满足条件的序列可能很多,序列数对 10^9+7 取模. Input 第一行一个数 T,表示有 T 组数据. 接下来 T 行,每行两个整数 n.m. T=500000,n≤1000000,m≤1000000 Output 输出 T 行,每行一个数,表示

HDU 2048 错排

错排递推公式: d(n) = (n-1)*(d[n-1]+d[n-2]): 证明:将第n个元素放到第k处,第k处的元素如果放到第n处,就是d(n-2),否则,先假设放到第n处,然后错排,就是d(n-1): 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 double fac[22] = {1,1}; 6 double d[22] = {0,0,1,2}; 7 8 int main() 9 { 10 for(int i=1;i<

错排问题

问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放的位置.有几种摆法? 这个问题推广一下,就是错排问题,是组合数学中的问题之一. 考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排. n个元素的错排数记为D(n). 研究一个排列错排个数的问题,叫做错排问题或称为更列问题. 错排问题最早被尼古拉·伯努利和欧拉研究,因此历史上也称为伯努利-欧拉的装错信封的问题.这个问题有许多具体的版本,如在写信时将n封信装到n个不同的信封里,有

lightoj 1095 - Arrange the Numbers (错排数)

题意: 求n个数的排列,前m个中有k个在自己的位置上的方法数. 思路: 设D[n]为n个元素的错排数. 于是我们有D[1] = 0 D[2] = 1: D[n] = (D[n-1] + D[n-2]) * (i-1) 考虑问题本身,我们首先从前m个数选k个数不动.即C(m,k).对于没有选的前m中的m-k个数肯定是参与了错排,而后面n-m个数中参加错排的个数不定,所以我们枚举一个后面n-m个数中选出i(0 <= i <= n - m)个数有没有参与错排.总共就有n-k-i参与了错排. 综上所述

不容易系列之一(hdu1465)错排+递推

不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 16646 Accepted Submission(s): 6935 Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样.话

杭电---2068 RPG的错排

Problem Description  今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿,G是月野兔:第二次猜:R是草儿,P是月野兔,G是公主:第三次猜:R是草儿,P是公主,G是月野兔:......可怜的野骆驼第六次终于把RPG分清楚了.由于RPG的带动,做ACM的女生越来越多,我们的野骆驼想都知道她们,可现在有N多人,他要猜的次数可就多了,为了不为难野骆驼,女生们只

hdu 1465(不容易系列之一)(水题,错排公式)(a[n]=(n-1)*(a[n-1]+a[n-2]))

不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14924    Accepted Submission(s): 6207 Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总

ACM学习历程—HDU2068 RPG的错排(组合数学)

Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿,G是月野兔:第二次猜:R是草儿,P是月野兔,G是公主:第三次猜:R是草儿,P是公主,G是月野兔:......可怜的野骆驼第六次终于把RPG分清楚了.由于RPG的带动,做ACM的女生越来越多,我们的野骆驼想都知道她们,可现在有N多人,他要猜的次数可就多了,为了不为难野骆驼,女生们只要求他答对一半或以

RPG的错排

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8387    Accepted Submission(s): 3415 Problem Description 今 年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜 猜,第一次猜:R是公主,P是草