从M个数中任意选出N个数,罗列出所有的情况

问题描述

用 java 实现的简单思路是什么呢?? 问题补充:好像意思没表达清除,Input: int[m]output: int[n]下边 code 里边半天没能看出input,解答一下吧。谢谢阿programming 写道

解决方案

/** * @author Tony.Yan */public class Test { private int m; private int[] set; private boolean first; private int position; public Test(int n, int m) { this.m = m; first = true; position = n - 1; set = new int[n]; for (int i = 0; i < n; i++) set[i] = i + 1; } public boolean hasNext() { return set[0] < m - set.length + 1; } public int[] next() { if (first) { first = false; return set; } if (set[set.length - 1] == m) position--; else position = set.length - 1; set[position]++; for (int i = position + 1; i < set.length; i++) set[i] = set[i - 1] + 1; return set; } public static void main(String[] args) { Test nOfm = new Test(3, 5); while (nOfm.hasNext()) { int[] set = nOfm.next(); for (int i = 0; i < set.length; i++) { System.out.print(set[i]); } System.out.println(); } }}
解决方案二:
代码的意思是从1到m个数找出n个数,set[]不就是你要输出的结果吗
解决方案三:
public Test(int n, int m) { this.m = m; first = true; position = n - 1; set = new int[n]; for (int i = 0; i < n; i++) set[i] = i + 1; } 这个地方就是input
解决方案四:
其实我建议楼上给个伪代码。留点思考空间
解决方案五:
使用递归简单

时间: 2024-11-05 14:49:11

从M个数中任意选出N个数,罗列出所有的情况的相关文章

找出m个数中最小的n个数的算法

这个问题属于常见问题了,我的办法是采用堆. 截取STL中的partial_sort算法的实现: template <class RandomAccessIterator, class T, class Compare> void __partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, T*, Compare comp) { make_heap(first

m个数中取n个数的组合

#include <stdio.h> int a[1000]; int end; // 保存输入要取的n值 // 从m个数中,取出n个数的组合 void Combination(int m, int n) { int i, j; for (i = m; i >= n; i--) { a[n] = i;// 最后一个位置的元素可以取m,m-1,m-2.....n if (n > 1) { Combination(i - 1, n - 1);// 从剩余的i-1个元素中取出n-1 }

c语言程序设计-C语言求从n个数中选出k个的最优算法

问题描述 C语言求从n个数中选出k个的最优算法 在计算组合问题时一般算法总会溢出,有没有啥极快又可以避免溢出的算法? 解决方案 外部排序,你可是试试看

C++ 将pData[]数组中任意个数相加最接近Length(6000)的一组一组输出到a[];

问题描述 C++ 将pData[]数组中任意个数相加最接近Length(6000)的一组一组输出到a[]; 如果 pData[Count]={4000,1700,1600,1400,1345,1200,1050,870,452,450,297,120,110,104,98,.....} int* OptimizeData(int *pData,int Count,int Length); //Count 总个数,Length固定长度(6000) { int *a=new int[Count];

[经典面试题][百度]数组A中任意两个相邻元素大小相差1,在其中查找某个数。

题目 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置.如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置. 思路 这道题目最差时间复杂度也是O(N),所以重点在于能不能找到一种尽可能减少比较次数的方法. 如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置.4和1比较,差为3,那么即使最好情况(递增或者递减),4也就是在a[3]的位置,可以跳过a[1]a[2].这样在特定数组(目标值和a[1]相差很大)的情况下或许可以

算法 编程-有一个M*N的0-1矩阵,对其操作以后要使每一行、每一列都只有1个1,求这个矩阵中1的最大个数?

问题描述 有一个M*N的0-1矩阵,对其操作以后要使每一行.每一列都只有1个1,求这个矩阵中1的最大个数? matlab编写,就像数字填图的游戏一样,其中的数字1-9在每一行和每一列都有唯一的一个.在一个M*N的0-1矩阵中,我想得到的是在原矩阵上操作,使其每一行和每一列都只有唯一的一个1,怎样才能使得变换后1的个数最多. 解决方案 这个问题我觉的可以转换成,求解n皇后问题,不知道对不对,楼主可以试试 解决方案二: 谢谢!感觉有点像,但是条件里面任意两个皇后都同一斜线上,这个不要,然后就是我已经

N个数中选择M个数的组合(1&amp;lt;M&amp;lt;N)

要求:利用递归算法求出N个数,并从1-N这N个数中,任意取M个数(1<M<N)的所有组合情况,用递归实现! #include<stdio.h> const int MAX = 10; int g[MAX],N,M; void dfs(int n,int m) {//int sum;//和 for(int i=n;i>=1;i--){g[m] = i;if(m>1){dfs(i-1,m-1);}else{for(int j=1;j<=M;j++){printf(&q

在MathType中如何显示空格个数

  在MathType中如何显示空格个数 具体操作方法如下: 1.打开MathType公式编辑器软件,可以点击桌面上的MathType应用程序图标找开,也可以从Word的加载菜单中打开,根据自己的习惯选择即可. 2.在MathType菜单栏中,选择"预置"--"工作区预置". 在MathType菜单中选择"预置"--"工作区预置" 3.进入工作区预置后,会弹出一个"工作区预置"的对话框,在这个对话框的下部,

搜狗输入法中候选词的个数怎么修改

搜狗输入法中候选词的个数怎么修改           5个候选词: 9个候选词: 你可以通过在状态栏上面右键菜单里的[设置属性]→[皮肤设置]→[候选词个数]来修改,你的选择范围是3-9个. 输入法默认的是5个候选词,搜狗的首词命中率和传统的输入法相比已经大大提高,第一页的5个候选词能够满足绝大多数时的输入.推荐选用默认的5个候选词.如果候选词太多会造成查找时的困难,导致输入效率下降.