求组合数
从n个数里面取m个数 (递归实现)
/**
* Description:
* 求组合数(递归法)
* 从n个数里面取m个数 算法分析:
* 用递归的方法,每选出一个数字之后就把这个数字去掉,用剩余的数字继续递归
* @author cm
*
*/
public class Combination
{
private int m;
private int[] res; //存放结果数组
private int[] arr; //被选择的数组
private int count = 0;
private int total = 0; //总数
/**
* @param m 选择的个数
* @param arr 被选择的数组
*
*/
public Combination(int m, int[] arr)
{
this.m = m;
this.arr = arr;
res = new int[m];
}
/**
* 求组合数
*/
public void combination()
{
comb(0);
}
/**
* @param start 递归调用的开始下标
*/
private void comb(int start)
{
if (count == m)
{
print();
total++;
return;
}
for (int i = start; i < arr.length; i++)
{
res[count] = arr[i];
count++;
comb(i+1); //递归调用
count--;
}
}
//打印结果
private void print()
{
for (int i = 0; i < res.length; i++)
{
System.out.print(res[i] + " ");
}
System.out.println();
}
/**
* @return 返回组合数的个数
*/
public int getTotal()
{
return total;
}
public static void main(String[] args)
{
int[] arr = {1,2,3,4,5,6,7,8,9};
//9选7
Combination comb = new Combination(7,arr);
comb.combination();
System.out.println(comb.getTotal());
}
}
分享到:
相关推荐
练习2-18 求组合数 (15 分) 本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数。 建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是...
VB 用过程求组合数,输入m和n,按等号键可得组合数,来看如下的简单代码: Private Sub f(m As Integer, p As Long) '自定义通用过程,用于求阶乘 Dim i As Integer '声明局部变量 p = 1 '赋初值 For i = 1 ...
求组合数的个数,以及枚举的C/C++程序代码,分享资源给需要的
求组合数
利用C(n,m)直接求解公式时,会出现爆int或者longlong的事情,所以杨辉三角便起到作用了,一维数组,空间时间复杂度均十分优秀。
总结一下,"求组合数小程序(已打包"这个资源可能包含了一个修复后的C++程序,该程序实现了基于杨辉三角的组合数计算。用户可以通过下载并分析这个名为"Combination"的压缩包文件,学习如何在实际编程中计算组合数,...
求组合数并列出所有项,输入要求的字符串
求组合数.rar
在VB(Visual Basic)编程语言中,组合数是一种常见的数学计算,它在各种算法和问题解决中都有应用,比如概率论、统计学以及计算机科学的某些领域。组合数表示从n个不同元素中不重复地选取k个元素的方法数量,通常用...
求组合数.rap
02求组合数.rap
本文将详细讲解如何利用MFC来实现求解组合数的问题。 组合数,也称为二项式系数,是组合数学中的一个重要概念。在组合论中,给定两个非负整数n和k,它们的组合数C(n, k)表示从n个不同的元素中无序选取k个元素的方法...
在编程领域,组合数(Combination Number)是一个重要的数学概念,尤其在计算机科学中的算法设计和数据结构中占据着核心地位。组合数通常用C(n, m)表示,表示从n个不同元素中不重复地选取m个元素的方法数。在MFC...
在VB(Visual Basic)编程语言中,组合数是一种常见的数学计算任务,特别是在处理排列组合问题时。组合数,也称为二项式系数,通常表示为C(n, k),表示从n个不同元素中不重复地选取k个元素的方法数量。在VB中实现这...
说明:1. 数较小且mod较大时求组合数使用逆元,数较大且mod较小时求组合数用lucas2. 该模版只可以求对于正数的组合数,如果出现负数的情况则返回0使用方
动态规划是一种强大的算法思想,广泛应用于解决复杂计算问题,如组合数求解。组合数,又称二项式系数,表示从n个不同元素中不重复地选取m个元素的方法数,通常表示为C(n, m)或"n choose m"。在本场景中,我们探讨...
根据给定的文件信息,我们可以总结出以下关于“计算组合数”的相关知识点: ### 一、组合数概念 组合数是指从n个不同元素中选取m(m≤n)个元素的方法数目,记作C(n, m)或者\( \binom{n}{m} \)。在数学中,组合数...
用于二进制求组合数,比起递归更加高效,如果py文件运行不了请联系我拿TXT文件
在C++编程中,求组合数是一个常见的数学计算任务,特别是在处理排列组合问题时。组合数,也称为二项式系数,表示从n个不同元素中不重复地选取r个元素的方法数,记为C(n, r)或者"n choose r"。本文将详细介绍三种在...
C语言程序设计-编写main程序调用函数fact求解从m个元素选n个元素的组合数的个数;计算公式是: 组合数=m!(n!.(m-n)!);要求m不能小于n,否则应有容错处理;说明:函数fact(x)的功能是求x!;