基于排列与组合输出多少中情况详解

2016-02-19 09:17 2 1 收藏

有了下面这个基于排列与组合输出多少中情况详解教程,不懂基于排列与组合输出多少中情况详解的也能装懂了,赶紧get起来装逼一下吧!

【 tulaoshi.com - 编程语言 】

排列
代码如下:

#include stdio.h
// 主要是找到当前要排的 和后面要排数的关系
int swap(int m,int n)
{
 if(n==1)
  return m-n+1;
 return  m*swap(m-1,n-1);

}
int main()
{
 int m=5,n=4;
 printf("%d",swap(5,4));

}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

组合

计算3个A,2个B可以组成多少种排列的问题

思路一:
代码如下:

#include stdio.h

/*
  3个A,2个B 根据排列 第一个位置
  可以是A也可以是B 如A_ _ _ _ 或着 B_ _ _ _ 由于第一个位置
  确定了 一个字母 所以 如果确定的是A 则在剩下的四个位置中
  就只能有 2个A ,2个B了 所以总的情况就是 A_ _ _ _ +B_ _ _ _ 两个排列总数之和
*/
int f(int m, int n)
{
 if(m==0 || n==0) return 1;
    return f(m,n-1)+f(m-1,n);
}

void main ()

  printf("%d ",f(3,2));
}

思路二:
代码如下:

#include stdio.h
#include math.h

/*
       对于(m+n)!种排列方法是针对所有元素都不重复的情况下计算出的,
    如果存在重复,则需要筛选出这些重复的排列情况。
    于是我们可以采用捆绑法,将相同的元素绑在一起,由于是组合,所以内部元素的排列问题不予考虑,
    这些排列数总共有m!和n!,因此去掉这些重复情况后就得到(m+n)!/(m!*n!)中排法。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

    m个A n个B的排列一共有(m+n)!/(m!*n!)
 而m-1个A n-1个B的排列一共有(m+n-2)!/((m-1)!*(n-1)!)
 所以m个A n个B的排列数=m-1个A n-1个B的排列数*(m+n)*(m+n-1)/(m*n) 

   关键是找到(m个A和n个B的排列)和(m-1个A和n-1个B)之间关系

*/
int f(int m, int n)
{
 if(m==0 || n==0) return 1;
    return f(m-1,n-1)*(m+n-1)*(m+n)/m/n;
}

void main ()

  printf("%d ",f(3,2));
}

来源:https://www.tulaoshi.com/n/20160219/1590227.html

延伸阅读
Knolling将排列组合玩到极致的艺术   看到摆放整齐的物件会产生愉悦感这件事是不分男女老少的,不管你是不是个宣扬并践行凌乱美的人。 所以,在社交网络上晒出拍摄得整整齐齐的物件,是圈粉集赞、打败自拍狂魔的不二法门! 把喜欢的东西按照一定规则摆放好再来一张定妆照,在英语里已经有一个专有名词,叫Knolling。一开始是...
标签: 手机游戏 IOS
《唐门》英雄组合技巧详解 《唐门》的玩家都积极了呢?有没有在游戏中遇到神马情况呢?等级上不去或者是英雄的选择上遇到困难了呢?其实很多问题都是由于武将啊或者那些的,下面图老师图老师小编就为大家来说说唐门中的武将问题! 武将 我们可以看到武将的等级是1~5星的等级,随着你的等级的提升,英雄获得的也是很多的途径,最直接的是能够...
  也许一个开发人员一半以上的时间都是在面对错误,所以好的调试/查错方法(工具)会减轻我们工作的负担,也可以让枯燥的DEBUG过程得以缩短。 VC开发环境所提供的调试环境是很优秀的,我们可以运用单步运行,设置断点的方法来查找问题所在。但是这种跟踪是非常耗时的,所以我们需要采用一些策略来让我们更容易的发现错误并对错...
做Android应用,不可避免的会与SQLite打交道。随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了。 SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段。 并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段: 代码如下...
举例: =================================================== 代码如下: /** INITRM - Initialization of internal ram position register; 0x0000 0010 **/ typedef union {    byte Byte;    struct {       byte RAMHAL :1;       byte :1;   &nb...

经验教程

527

收藏

63
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部