douyi1982 2017-02-17 06:19
浏览 33
已采纳

PHP中的整数分区

This feels like a very simple problem, but I can't manage to make it elegant and 'feels right'. Here's the problem:

Giving a number T, print out all possible ways to get to T. For example :

T = 5
1 + 1 + 1 +1 + 1
2 + 1 + 1 + 1
3 + 1 + 1
2 + 2 + 1
4 + 1
3 + 2

Note that, 3 + 2 is equal than 2 + 3, so you don´t have to print both cases.

I have to do it in PHP, hope anyone can help :).

  • 写回答

1条回答 默认 最新

  • douxianji3367 2017-02-17 06:42
    关注

    One easy way to solve this problem is to solve it recursively. Following is a sample code,

    <?php
    function recursion($left, $last, $ar) {
        if($left == 0) {
            foreach ($ar as $n) {
                printf("%d ", $n);
            }
            print "<br>";
            return;
        }
        for($n = $last; $n <= $left; $n++) {
            $b = $ar;
            array_push($b, $n);
            recursion($left - $n, $n, $b);
        }
    }
    
    recursion(5, 1, []);
    

    Output:

    1 1 1 1 1 
    1 1 1 2 
    1 1 3 
    1 2 2 
    1 4 
    2 3 
    5 
    

    Note that, this bruteforce recursive solution won't work for bigger T. There exist some dynamic programming solutions which can solve this problm for numbers in a larger range.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?