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

毕老大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可以组成多少种排列的问题

思路一:
代码如下:

#include stdio.h

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

/*
  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!)中排法。

    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://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

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

基于结构体与指针的详解

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

s8lol主宰符文怎么配

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

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

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

基于Sizeof与Strlen的区别以及联系的使用详解

编程语言 网络编程
基于Sizeof与Strlen的区别以及联系的使用详解

lol偷钱流符文搭配推荐

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

基于request.getAttribute与request.getParameter的区别详解

编程语言 网络编程
基于request.getAttribute与request.getParameter的区别详解

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

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

lolAD刺客新符文搭配推荐

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

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

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

解析四方定理的应用

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