php如何将一个整数分解为多整数之和

33 篇文章 0 订阅

一个整数拆分成多个整数的和,并打印出每一种组合,先列出对就php实现的代码:
 

function splitdigit($n, $k) { //n是需要拆分的整数,k是指res数组的下标
    $rest =0; //存放拆分后剩余的整数
	for ($num = 1;$num <= $n; $num++) {  //从1开始尝试拆分
        if ($num >= $GLOBALS['res'][$k - 1] ) { //拆分的解要大于或等于前一个解保证不重复
            $GLOBALS['res'][$k] = $num; //将这次拆分存放在res数组中
            $rest = $n - $num; //剩下的是n-num
            if ($rest == 0) { //如果没有剩下的,说明本次拆分结束
                $GLOBALS['times']++;  //拆分次数加1
                printf("%3d:", $GLOBALS['times']);
                for ($j = 1; $j < $k; $j++) {  //输出解
                    printf("%d+", $GLOBALS['res'][$j]);
                }//for
                printf("%d<br />", $GLOBALS['res'][$j]);
			}//if
            else{
                splitdigit($rest, $k + 1);  //如果有剩下的,继续求出res[k+1]
            }
        }//if
    }//for
}
$res[] =0;
$times =0;
splitdigit(5,1);
echo '=====================================<br />';
$res[] =0;
$times =0;
splitdigit(8,1);

对应的执行结果:

1:1+1+1+1+1
2:1+1+1+2
3:1+1+3
4:1+2+2
5:1+4
6:2+3
7:5
=====================================
1:1+1+1+1+1+1+1+1
2:1+1+1+1+1+1+2
3:1+1+1+1+1+3
4:1+1+1+1+2+2
5:1+1+1+1+4
6:1+1+1+2+3
7:1+1+1+5
8:1+1+2+2+2
9:1+1+2+4
10:1+1+3+3
11:1+1+6
12:1+2+2+3
13:1+2+5
14:1+3+4
15:1+7
16:2+2+2+2
17:2+2+4
18:2+3+3
19:2+6
20:3+5
21:4+4
22:8

算法思想
用一个数组res[]存放拆分的解,用全局变量存放拆分的方法数。splitdigit(n,k)使用n表示要分解的整数,k表示res数组下标,即第k次拆分。先从splitdigit(n,1)开始,用num表示第k个拆分的数,即res[k]=num,让num在[1,n]内遍历。用rest=n-num表示拆分后剩下的整数值。若rest等于零,代表本次拆分结束,输出拆分解。否则处理第k+1个数组元素,即splitdigit(rest,k+1),依次类推,直到rest为0输出结果。

数据结构
splitdigit($n,$k): n表示要分解的整数,k表示res数组下标,即第k次拆分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北漂燕郊杨哥

您的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值