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

 更新时间:2013年05月08日 16:00:37   作者:  
本篇文章对排列与组合输出多少中情况进行了介绍。需要的朋友参考下

排列

复制代码 代码如下:

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

相关文章

  • 从汇编看c++的默认析构函数的使用详解

    从汇编看c++的默认析构函数的使用详解

    本篇文章是对c++中默认析构函数的使用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • linux内核select/poll,epoll实现与区别

    linux内核select/poll,epoll实现与区别

    这篇文章主要介绍了linux内核select/poll,epoll实现与区别,需要的朋友可以参考下
    2016-11-11
  • C语言求连续最大子数组和的方法

    C语言求连续最大子数组和的方法

    这篇文章主要介绍了C语言求连续最大子数组和的方法,包含了数组的常见操作及相关技巧,需要的朋友可以参考下
    2014-09-09
  • 深入理解Qt 初始项目代码

    深入理解Qt 初始项目代码

    本文解析了Qt项目创建后的主要文件,包括main.cpp、mywidget.h、mywidget.cpp、mywidget.ui和.pro,main.cpp这五个文件,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • C++实现景区信息管理系统

    C++实现景区信息管理系统

    这篇文章主要为大家详细介绍了C++实现景区信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C语言实现快速排序算法实例

    C语言实现快速排序算法实例

    快速排序时间复杂度为O(nlogn),是数组相关的题目当中经常会用到的算法,下面这篇文章主要给大家介绍了关于C语言实现快速排序算法的相关资料,需要的朋友可以参考下
    2022-06-06
  • C++ 智能指针的模拟实现实例

    C++ 智能指针的模拟实现实例

    这篇文章主要介绍了C++ 智能指针的模拟实现实例的相关资料,智能指针是一个类,它把普通指针封装起来,能实现和普通指针同样的功能。,需要的朋友可以参考下
    2017-07-07
  • C++数据模型应用在QML委托代理机制中

    C++数据模型应用在QML委托代理机制中

    这篇文章主要介绍了在QML委托代理机制中使用C++数据模型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • C语言详细分析浮点数在内存中的储存

    C语言详细分析浮点数在内存中的储存

    我们在日常生活中和编程中都会用到小数,比如:3.1415926、29.9、1E10(科学计数法也是浮点型)。在C语言中的浮点型类型有:float,double,long double。那么浮点数在这些浮点型的内存之中又是如何储存的呢,这就是今天我们要分享的
    2022-06-06
  • 一文掌握 C++ 智能指针的使用方法

    一文掌握 C++ 智能指针的使用方法

    C++11 引入了智能指针的概念,使用了引用计数的想法,让程序员不再需要关心手动释放内存。关于C++指针得内容下面文章将为大家做一个详细介绍
    2021-09-09

最新评论