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

毕老大baby

毕老大baby

2016-02-19 09:17

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

排列
代码如下:

#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));

}

组合

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

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

思路一:
代码如下:

#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

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

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

    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));
}

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
基于排列与组合输出多少中情况详解

基于结构体与指针的详解

编程语言 网络编程
基于结构体与指针的详解

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

基于C语言EOF与getchar()的使用详解

编程语言 网络编程
基于C语言EOF与getchar()的使用详解

关于各种排列组合java算法实现方法

编程语言 网络编程
关于各种排列组合java算法实现方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

顺序求出c(n,r)的排列组合

电脑网络
顺序求出c(n,r)的排列组合

Knolling将排列组合玩到极致的艺术

摄影 人像摄影 静物摄影
Knolling将排列组合玩到极致的艺术

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

js实现网页检测是否安装了 Flash Player 插件

js实现网页检测是否安装了 Flash Player 插件

解析四方定理的应用

解析四方定理的应用
下拉加载更多内容 ↓