问题可分解为:
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
分享到:
相关推荐
编程求解:输入两个整数 n 和 m,从数列 1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来。
标题中的“python实现n个数中选出m个数的方法”是指在Python编程环境中,如何从一个包含n个元素的集合中选择出m个元素的所有可能组合。这个问题在计算机科学和算法设计中通常被称为组合问题,它涉及到组合数学和回溯...
排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能的方式;组合则是指不考虑元素的顺序,仅考虑元素的选取。在这个问题中,我们不仅要考虑元素的选取,还要考虑它们的顺序,因此属于...
"javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号" 本文解释了如何使用JavaScript算法解决一个特定的算法题目,即在不重复的N位数的组合中找出某个数的大小排列序号。该题目要求生成从小到...
在编程领域,阶乘是一个常见的数学概念,通常用于计算组合数和概率问题。在Java中,我们可以使用循环或递归的方式来实现求解任意正整数的阶乘。本篇文章将详细探讨如何用Java来计算阶乘。 首先,我们需要理解阶乘的...
任意输入一个偶数n(n>4),请将它分解为两个素数之和。
在这些不重复的组合中,从小到大进行排序后,能够根据输入的任意一个组合数字,计算出它在该序列中的位置(即序号)。例如,当N=3时,输入M=213,需要输出所有可能的排列组合,并且指明213在其中的序号。 算法解决...
### 组合理论及其应用——李凡长课后习题... 有m个省,每省有n个代表,若从这mn个代表中选出k(k≤m)个 **解答**: - 这是一个典型的组合问题。 - 从mn个代表中选出k个代表的方案数为:\(\left(C_{mn}^k\right)\)。
罗列数字的全部组合形式,相当于Matlab中的combntns(m,n)。
在数学领域,斯特林数和自然数前m项n次方和是两个重要的概念,它们在组合数学和数论中有广泛的应用。斯特林数是一种特殊数,分为第一类斯特林数和第二类斯特林数,而自然数前m项n次方和则是关于数列求和的一个问题。...
结构体中,我们可以采用分治策略,将乘法器分解为多个较小的乘法单元,如半加器和全加器,它们会根据位宽自动组合。 描述中的"任意N位和M位的乘法器VHDL实现(代码)"可能包含以下步骤: 1. **位扩展**:为了将...
本主题聚焦于使用VHDL实现任意N位和M位的乘法器,这是一个在数字系统设计中至关重要的运算单元,尤其在数字信号处理、计算和通信系统中。 乘法器的设计通常基于不同的算法,如Booth算法、Kogge-Stone算法或Wallace...
全排列是组合数学中的一个重要概念,它指的是从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排列起来,所有可能的排列方式称为全排列。在这个程序中,我们关注的是如何通过编程来求解任意几个数的全排列问题。...
例如,在计算模p的组合数时,我们可以通过将m和n拆分为二进制形式,然后逐位计算组合数的积,如果某个位置的m_i或n_i为0,那么对应的组合数 \( \binom{m_i}{n_i} \) 就是1;如果m_i和n_i相等且不为0,那么 \( \binom...
全排列指的是从给定的n个不同元素中取出m(m≤n)个元素的所有可能的排列方法,本题中特别强调了1到9之间的数字不得重复使用。对于全排列,我们通常使用递归和迭代的方法进行求解。在本题中,我们需要解决的是如何...
为了解决这个问题,我们并不需要一次性找出所有可能的组合,而是采取贪心策略,依次删除每个数字,每次删除时选择当前未删除数字中最小的一个,这样可以保证每次删除后得到的数都是最小的。这是一个局部最优解能够...
本文将详细讨论如何使用置数法来实现任意进制计数器,特别是当计数的位数N小于计数器的位数M时的情况。 首先,我们来看看集成计数器芯片,例如74LS161,它具有多个引脚,包括电源引脚VCC和GND,数据输入端D0到D3,...