zoukankan      html  css  js  c++  java
  • 不容易系列之(4)——考新郎

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=2049

    国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:


    首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排;
    然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个.
    最后,揭开盖头,如果找错了对象就要当众跪搓衣板...

    看来做新郎也不是容易的事情...

    假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.

     
    Input
    输入数据的第一行是一个整数C,表示测试实例的个数,然后是C行数据,每行包含两个整数N和M(1<M<=N<=20)。
     
    Output
    对于每个测试实例,请输出一共有多少种发生这种情况的可能,每个实例的输出占一行。
     
    Sample Input
    2 2 2 3 2
     
    Sample Output
    1 3
     
     
    题目分析:
    要求从n个新郎里面选m个配对错误的新郎,所以是n,m的组合数,c(n,m),然后将这m个新郎形成错排
    错排分析:
    1.假如前n-1个新郎已经形成了错排,那么第n个新郎只需要将自己的新娘与前面的n-1个新娘交换即可

    2.假如前n-1个人不是都错排,那么要想使第n个人过来与其中一个交换后实现错排的话就必须满足两个条件:

                   1.那n-1个人中只有一个人选到了自己的新娘,也就是说有n-2个人都已经错排了。

                   2.第n个人必须和那个选到自己新娘的人去交换,但那个选到自己新娘的人可以是n-1个人中的任意一个。这种情况有(n-1)*f[n-2]种可能。

                   其他情况都不能满足n个人错排。

    代码如下:

     1 #include<stdio.h>
     2 long long f(int n)
     3 {
     4     long long i,s=1;
     5     for(i=1;i<=n;i++)
     6     {
     7         s=s*i;
     8     }
     9     return s;
    10 }
    11 long long ff(int n,int m)
    12 {
    13     long long s=0;
    14     s=(f(n))/(f(m)*f(n-m));
    15     return s;
    16 }
    17 int main()
    18 {
    19     int t;
    20     scanf("%d",&t);
    21     while(t--)
    22     {
    23         int n,m;
    24         scanf("%d %d",&n,&m);
    25         long long s=ff(n,m);
    26         long long  a[25],i;
    27         a[0]=0;
    28         a[1]=0;
    29         a[2]=1;
    30         for(i=3;i<=20;i++)
    31         {
    32             a[i]=(i-1)*(a[i-1]+a[i-2]);
    33         }
    34         printf("%lld
    ",s*a[m]);
    35     }
    36     return 0;
    37 }

    不足错误之处请大佬指出!!!!

  • 相关阅读:
    笔记:C/C++字符函数的使用
    学习游戏基础编程3:地图编辑器
    学习游戏基础编程2:Win32分割窗口
    学习游戏基础编程1:Win32自定义控件
    [WebServer] Tomcat 配置访问限制:访问白名单和访问黑名单
    [WebServer] Windows操作系统下 Tomcat 服务器运行 PHP 的环境配置
    XSLT函数集合:数值函数、字符串函、节点集函数和布尔函数
    腾讯的一道JavaScript面试题
    【转】AES 进一步的研究
    MQTT-Client-FrameWork使用整理
  • 原文地址:https://www.cnblogs.com/yinbiao/p/8621589.html
Copyright © 2011-2022 走看看