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

排列


代码如下:

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

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

(0)

相关推荐

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

    排列 复制代码 代码如下: #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.

  • JS中不应该使用箭头函数的四种情况详解

    目录 箭头函数的一些缺点 1.不支持参数对象 2.无法通过apply.call.bind来改变this指针 什么时候不能使用箭头功能 1.请不要在构造函数中使用箭头函数 2.请不要在点击事件中操作this 3.请不要在对象的方法中使用箭头函数. 4.请不要在原型链中使用箭头函数 箭头函数给我们的工作带来了极大的方便,但是它们有什么缺点呢?我们应该一直使用箭头函数吗?我们应该在哪些场景中停止使用箭头函数? 现在,我们开始吧. 箭头函数的一些缺点 1.不支持参数对象 在箭头函数中,我们不能像在普通函

  • 基于Opencv图像识别实现答题卡识别示例详解

    目录 1. 项目分析 2.项目实验 3.项目结果 总结 在观看唐宇迪老师图像处理的课程中,其中有一个答题卡识别的小项目,在此结合自己理解做一个简单的总结. 1. 项目分析 首先在拿到项目时候,分析项目目的是什么,要达到什么样的目标,有哪些需要注意的事项,同时构思实验的大体流程. 图1. 答题卡测试图像 比如在答题卡识别的项目中,针对测试图片如图1 ,首先应当实现的功能是: 能够捕获答题卡中的每个填涂选项. 将获取的填涂选项与正确选项做对比计算其答题正确率. 2.项目实验 在对测试图像进行形态学操

  • Java中LinkedList详解和使用示例_动力节点Java学院整理

    第1部分 LinkedList介绍 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. LinkedList 实现 List 接口,能对它进行队列操作. LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用. LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆. LinkedList 实现java.io.Serial

  • 基于Python函数的作用域规则和闭包(详解)

    作用域规则 命名空间是从名称到对象的映射,Python中主要是通过字典实现的,主要有以下几个命名空间: 内置命名空间,包含一些内置函数和内置异常的名称,在Python解释器启动时创建,一直保存到解释器退出.内置命名实际上存在于一个叫__builtins__的模块中,可以通过globals()['__builtins__'].__dict__查看其中的内置函数和内置异常. 全局命名空间,在读入函数所在的模块时创建,通常情况下,模块命名空间也会一直保存到解释器退出.可以通过内置函数globals()

  • Java基于装饰者模式实现的染色馒头案例详解

    本文实例讲述了Java基于装饰者模式实现的染色馒头案例.分享给大家供大家参考,具体如下: 一.模式定义 装饰者模式,是在不改变原类文件和使用继承的情况下,动态扩展一个对象功能,它是通过创建一个包装对象,也就是装饰来包装真实的对象. 装饰对象和真实对象有相同接口,这样客户端对象就可以和真实对象相同方式和装饰对象交互. 装饰对象包含一个真实对象的引用. 二.模式举例 1. 模式分析 我们借用黑心商贩制做染色馒头案例说明这一模式. 2. 装饰者模式静态类图 3. 代码示例 3.1 创建馒头接口--IB

  • 基于DataFrame筛选数据与loc的用法详解

    DataFrame筛选数据与loc用法 python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作.运算.统计等功能. 如何从一个DataFrame中筛选中出一个元素呢. 以tushare返回的交易日信息为例. df = ts.trade_cal() 数据如下: calendarDate isOpen 0 1990/12/19 1 1 1990/12/20 1 2 1990/12/21 1 3 1990/12/22 0 4 1990/12/23 0 5 1990/12

  • Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解

    从Laravel 5.5+开始,加入了API Resources这个概念. 我们先来看一下官网如何定义这个概念的: When building an API, you may need a transformation layer that sits between your Eloquent models and the JSON responses that are actually returned to your application's users. Laravel's resour

  • 基于Python的身份证验证识别和数据处理详解

    根据GB11643-1999公民身份证号码是特征组合码,由十七位数字本体码和一位数字校验码组成,排列顺序从左至右依次为: 六位数字地址码八位数字出生日期码三位数字顺序码一位数字校验码(数字10用罗马X表示) 校验系统: 校验码采用ISO7064:1983,MOD11-2校验码系统(图为校验规则样例) 用身份证号的前17位的每一位号码字符值分别乘上对应的加权因子值,得到的结果求和后对11进行取余,最后的结果放到表2检验码字符值..换算关系表中得出最后的一位身份证号码 代码: # coding=ut

  • 关于C++中二分法详解

    目录 一.整数二分 1.整数二分模板 2.求解二分问题的思路 3.练习 二.浮点数二分 1.浮点数二分模板 2.练习 三.总结 一.整数二分 单调性与二分的关系:有单调性一定可以二分,用二分不一定是单调性.二分的本质不是单调性而是边界点(找符合条件的最小的数或者最大的数)整数二分是求红色范围的右端点 或者 绿色范围的左端点 1.整数二分模板 bool check(int x) {/* ... */} // 检查x是否满足某种性质 // 区间[l, r]被划分成[l, mid]和[mid + 1,

随机推荐