如何得到指定数字中任意几个数字的组合
2011-12-22 10:42
381 查看
比如1,2,3,4,5,6这六个数字,我想得到它任意5个数字的组合或任意4个数字的组合,该如何得到?
使用递归,函数主体如下(il_count为实例变量,仅用于统计,可以不要), mle_1用于输出结果
//====================================================================
// 函数: w.wf_digui()
//--------------------------------------------------------------------
// 描述:递归输出符合条件的组合
//--------------------------------------------------------------------
// 参数:
// value long al[] //用来取组合的数组,如:{1,2,3,4,5,6}
// value string as //截止到目前为止,已经组合的数字串, 如:123
// value long al_start //从“用来取组合的数组”的第几位开始取,如:为2时,表示从{1,2,3,4,5,6}的2开始
// value long al_num //从“用来取组合的数组”中取几个数字,如:为2时,表示从{1,2,3,4,5,6}中取两个数字
//--------------------------------------------------------------------
// 返回: (None)
//--------------------------------------------------------------------
//====================================================================
long ll[], i,j, k
long ll_deal
string ls
//要取的个数为0,则返回
if al_num = 0 then return
//从开始为止al_start开始循环直到“用来取组合的数组”的最后一个数字
for j = al_start to upperbound(al)
//在循环中取1个数字,并将该数字添加到“已经组合的数字串”的后面
ls = as + string(al[j])
if al_num = 1 then //如果本次只需要再取1个数字,则取数字完毕,输出结果(il_count仅用于统计输出的数目,可以不要)
il_count ++
if mle_1.text <> '' then mle_1.text += '~r~n'
mle_1.text += string(il_count) + '~t:' + ls
else //如果本次需要取的数字超过1个,则在取得1个数字后,将取数起始位置 + 1,取数个数 -1, 然后递归往下取
//j已经循环到底了,这时候还没达到规定的个数,则返回,表示取不了了
if j = upperbound(al) then exit
wf_digui( al, ls, j + 1, al_num - 1)
end if
next
调用方法如下:
il_count = 0
//参数1:{1,2,3,4,5,6}为“用来取组合的数组”
//参数2:取出来的数字串的前缀
//参数3:从“用来取组合的数组”的第N个数字开始取
//参数4:需要取几个数字
wf_digui({1,2,3,4,5,6}, '输出', 1, 3)
使用递归,函数主体如下(il_count为实例变量,仅用于统计,可以不要), mle_1用于输出结果
//====================================================================
// 函数: w.wf_digui()
//--------------------------------------------------------------------
// 描述:递归输出符合条件的组合
//--------------------------------------------------------------------
// 参数:
// value long al[] //用来取组合的数组,如:{1,2,3,4,5,6}
// value string as //截止到目前为止,已经组合的数字串, 如:123
// value long al_start //从“用来取组合的数组”的第几位开始取,如:为2时,表示从{1,2,3,4,5,6}的2开始
// value long al_num //从“用来取组合的数组”中取几个数字,如:为2时,表示从{1,2,3,4,5,6}中取两个数字
//--------------------------------------------------------------------
// 返回: (None)
//--------------------------------------------------------------------
//====================================================================
long ll[], i,j, k
long ll_deal
string ls
//要取的个数为0,则返回
if al_num = 0 then return
//从开始为止al_start开始循环直到“用来取组合的数组”的最后一个数字
for j = al_start to upperbound(al)
//在循环中取1个数字,并将该数字添加到“已经组合的数字串”的后面
ls = as + string(al[j])
if al_num = 1 then //如果本次只需要再取1个数字,则取数字完毕,输出结果(il_count仅用于统计输出的数目,可以不要)
il_count ++
if mle_1.text <> '' then mle_1.text += '~r~n'
mle_1.text += string(il_count) + '~t:' + ls
else //如果本次需要取的数字超过1个,则在取得1个数字后,将取数起始位置 + 1,取数个数 -1, 然后递归往下取
//j已经循环到底了,这时候还没达到规定的个数,则返回,表示取不了了
if j = upperbound(al) then exit
wf_digui( al, ls, j + 1, al_num - 1)
end if
next
调用方法如下:
il_count = 0
//参数1:{1,2,3,4,5,6}为“用来取组合的数组”
//参数2:取出来的数字串的前缀
//参数3:从“用来取组合的数组”的第N个数字开始取
//参数4:需要取几个数字
wf_digui({1,2,3,4,5,6}, '输出', 1, 3)
相关文章推荐
- 如何得到指定数字中任意几个数字的组合
- 如何将几个数字进行搭配相加,得出指定区间的组合
- 用几个数字任意组合成最大数
- 如何计算出指定数字列表的组合数及组合明细
- 【Java中 任意几个数字获取其所有的排列组合】
- 从数字列表中,任意三个相加为指定值的所有组合
- 【Java中 任意几个数字获取其所有的排列组合】
- 如何组合几个命令的输出,实现整体的IO重定向
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 任意数字、字符序列,输出它们所有的排列组合
- 如何得到指定文件的公司名称,文件描述,内部名称,合法版权,原始文件名,产品名称,产品版本等一系列信息
- C# 如何得到XML文件中指定的节点属性值
- 如何判断输入的几个数字互不相同
- 五个整数任意组合(加减)得到1~122之间的数
- python3中正则表达式匹配字母,数字和汉字的任意组合
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 字母a-z,数字0-9,现需要其中任意3个作为密码,请输出所有可能组合。
- 如何用C++递归在BST(Binary Search Tree) 数有几个节点大于根节点的数字
- 小练习1:如何将一个纯数字字符串升序,得到一个新字符串
- 如何得到指定日期(年,月,季度,周)第一天和最后一天