如何得到指定数字中任意几个数字的组合

 

比如1,2,3,4,5,6这六个数字,我想得到它任意5个数字的组合或任意4个数字的组合,该如何得到?

 

 

使用递归,函数主体如下(il_count为实例变量,仅用于统计,可以不要), mle_1用于输出结果

  1. //====================================================================  
  2. // 函数: w.wf_digui()   
  3. //--------------------------------------------------------------------  
  4. // 描述:递归输出符合条件的组合   
  5. //--------------------------------------------------------------------  
  6. // 参数:   
  7. //     value    long      al[]        //用来取组合的数组,如:{1,2,3,4,5,6}  
  8. //     value    string    as          //截止到目前为止,已经组合的数字串, 如:123  
  9. //     value    long      al_start    //从“用来取组合的数组”的第几位开始取,如:为2时,表示从{1,2,3,4,5,6}的2开始  
  10. //     value    long      al_num      //从“用来取组合的数组”中取几个数字,如:为2时,表示从{1,2,3,4,5,6}中取两个数字  
  11. //--------------------------------------------------------------------  
  12. // 返回:  (None)   
  13. //--------------------------------------------------------------------  
  14. //====================================================================  
  15. long ll[], i,j, k  
  16. long ll_deal  
  17. string ls  
  18. //要取的个数为0,则返回   
  19. if al_num = 0 then return  
  20. //从开始为止al_start开始循环直到“用来取组合的数组”的最后一个数字   
  21. for j = al_start to upperbound(al)  
  22.     //在循环中取1个数字,并将该数字添加到“已经组合的数字串”的后面   
  23.     ls = as + string(al[j])  
  24.     if al_num = 1 then //如果本次只需要再取1个数字,则取数字完毕,输出结果(il_count仅用于统计输出的数目,可以不要)  
  25.         il_count ++  
  26.         if mle_1.text <> '' then mle_1.text += '~r~n'  
  27.         mle_1.text += string(il_count) + '~t:' + ls  
  28.     else //如果本次需要取的数字超过1个,则在取得1个数字后,将取数起始位置 + 1,取数个数 -1, 然后递归往下取  
  29.         //j已经循环到底了,这时候还没达到规定的个数,则返回,表示取不了了  
  30.         if j = upperbound(al)  then exit  
  31.         wf_digui( al, ls, j + 1, al_num - 1)  
  32.     end if  
  33. next  

调用方法如下:

     il_count = 0  

  1. //参数1:{1,2,3,4,5,6}为“用来取组合的数组”   
  2. //参数2:取出来的数字串的前缀   
  3. //参数3:从“用来取组合的数组”的第N个数字开始取   
  4. //参数4:需要取几个数字   
  5. wf_digui({1,2,3,4,5,6}, '输出', 1, 3)  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值