`
chriszeng87
  • 浏览: 741309 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

求长为n的数中任意m个数的组合

阅读更多

问题可分解为:
1. 首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。
2. 从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。
很明显,上述方法是一个递归的过程,也就是说用递归的方法可以很干净利索地求得所有组合。

 

上代码:

 

package algorithm.ms100;

public class CtzHe {
	private int[] array = {1,2,3,4,5};
	private int[] b= new int[3];
	private int M = 3;
	
	public void combine( int a[], int n, int m)
	{ 
		 for(int i=n; i>=m; i--)   // 注意这里的循环范围
		 {
			  b[m-1] = i - 1;
			  if (m > 1)
				  combine(a,i-1,m-1);
			  else                     // m == 1, 输出一个组合
			  {   
				  for(int j=M-1; j>=0; j--)
					  System.out.print( a[b[j]] + " ");
				  System.out.println();
			  }
		 }
	}
	
	public static void main(String[] args) {
		CtzHe c = new CtzHe();
		c.combine(c.array, 5, 3);

	}

}

 

   上面的代码修改自:http://blog.csdn.net/sharpdew/archive/2006/05/25/755074.aspx

0
1
分享到:
评论

相关推荐

    1到n内的几个数和为m

    编程求解:输入两个整数 n 和 m,从数列 1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来。

    python实现n个数中选出m个数的方法

    标题中的“python实现n个数中选出m个数的方法”是指在Python编程环境中,如何从一个包含n个元素的集合中选择出m个元素的所有可能组合。这个问题在计算机科学和算法设计中通常被称为组合问题,它涉及到组合数学和回溯...

    从n个数组中取出所有排列组合(Java实现)

    排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能的方式;组合则是指不考虑元素的顺序,仅考虑元素的选取。在这个问题中,我们不仅要考虑元素的选取,还要考虑它们的顺序,因此属于...

    javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号.docx

    "javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号" 本文解释了如何使用JavaScript算法解决一个特定的算法题目,即在不重复的N位数的组合中找出某个数的大小排列序号。该题目要求生成从小到...

    java 求任意一个正数的阶乘

    在编程领域,阶乘是一个常见的数学概念,通常用于计算组合数和概率问题。在Java中,我们可以使用循环或递归的方式来实现求解任意正整数的阶乘。本篇文章将详细探讨如何用Java来计算阶乘。 首先,我们需要理解阶乘的...

    任意输入一个偶数n(n>4),请将它分解为两个素数之和。

    任意输入一个偶数n(n>4),请将它分解为两个素数之和。

    javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号

    在这些不重复的组合中,从小到大进行排序后,能够根据输入的任意一个组合数字,计算出它在该序列中的位置(即序号)。例如,当N=3时,输入M=213,需要输出所有可能的排列组合,并且指明213在其中的序号。 算法解决...

    组合理论及其应用 李凡长 课后习题 答案

    ### 组合理论及其应用——李凡长课后习题... 有m个省,每省有n个代表,若从这mn个代表中选出k(k≤m)个 **解答**: - 这是一个典型的组合问题。 - 从mn个代表中选出k个代表的方案数为:\(\left(C_{mn}^k\right)\)。

    用Labview实现罗列所有组合(Cmn)

    罗列数字的全部组合形式,相当于Matlab中的combntns(m,n)。

    斯特林数和自然数前m项n次方和

    在数学领域,斯特林数和自然数前m项n次方和是两个重要的概念,它们在组合数学和数论中有广泛的应用。斯特林数是一种特殊数,分为第一类斯特林数和第二类斯特林数,而自然数前m项n次方和则是关于数列求和的一个问题。...

    任意N位和M位的乘法器VHDL实现(代码)

    结构体中,我们可以采用分治策略,将乘法器分解为多个较小的乘法单元,如半加器和全加器,它们会根据位宽自动组合。 描述中的"任意N位和M位的乘法器VHDL实现(代码)"可能包含以下步骤: 1. **位扩展**:为了将...

    任意N位和M位的乘法器VHDL实现

    本主题聚焦于使用VHDL实现任意N位和M位的乘法器,这是一个在数字系统设计中至关重要的运算单元,尤其在数字信号处理、计算和通信系统中。 乘法器的设计通常基于不同的算法,如Booth算法、Kogge-Stone算法或Wallace...

    求任意几个数的全排列

    全排列是组合数学中的一个重要概念,它指的是从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排列起来,所有可能的排列方式称为全排列。在这个程序中,我们关注的是如何通过编程来求解任意几个数的全排列问题。...

    组合数学- 组合数取模- 卢卡斯定理与扩展卢卡斯定理.rar

    例如,在计算模p的组合数时,我们可以通过将m和n拆分为二进制形式,然后逐位计算组合数的积,如果某个位置的m_i或n_i为0,那么对应的组合数 \( \binom{m_i}{n_i} \) 就是1;如果m_i和n_i相等且不为0,那么 \( \binom...

    javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号

    全排列指的是从给定的n个不同元素中取出m(m≤n)个元素的所有可能的排列方法,本题中特别强调了1到9之间的数字不得重复使用。对于全排列,我们通常使用递归和迭代的方法进行求解。在本题中,我们需要解决的是如何...

    C++回溯算法实验报告

    为了解决这个问题,我们并不需要一次性找出所有可能的组合,而是采取贪心策略,依次删除每个数字,每次删除时选择当前未删除数字中最小的一个,这样可以保证每次删除后得到的数都是最小的。这是一个局部最优解能够...

    数字电路分析与故障诊断 用置数法实现任意进制计数器(N小于M).pdf

    本文将详细讨论如何使用置数法来实现任意进制计数器,特别是当计数的位数N小于计数器的位数M时的情况。 首先,我们来看看集成计数器芯片,例如74LS161,它具有多个引脚,包括电源引脚VCC和GND,数据输入端D0到D3,...

Global site tag (gtag.js) - Google Analytics