Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的整数分区_Php_Algorithm - Fatal编程技术网

PHP中的整数分区

PHP中的整数分区,php,algorithm,Php,Algorithm,这感觉像是一个非常简单的问题,但我无法使它变得优雅和“感觉正确”。问题是: 给出一个数字T,打印出所有可能到达T的方法。 例如: T = 5 1 + 1 + 1 +1 + 1 2 + 1 + 1 + 1 3 + 1 + 1 2 + 2 + 1 4 + 1 3 + 2 请注意,3+2等于2+3,因此您不必同时打印这两种情况 我必须用PHP来做,希望任何人都能帮助:)。解决这个问题的一个简单方法是递归地解决它。下面是一个示例代码 <?php function recursion($left,

这感觉像是一个非常简单的问题,但我无法使它变得优雅和“感觉正确”。问题是:

给出一个数字T,打印出所有可能到达T的方法。 例如:

T = 5
1 + 1 + 1 +1 + 1
2 + 1 + 1 + 1
3 + 1 + 1
2 + 2 + 1
4 + 1
3 + 2
请注意,3+2等于2+3,因此您不必同时打印这两种情况


我必须用PHP来做,希望任何人都能帮助:)。

解决这个问题的一个简单方法是递归地解决它。下面是一个示例代码

<?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, []);

请注意,这种强力递归解决方案对较大的t不起作用。存在一些动态规划解决方案,可以解决较大范围内的数字的此问题。

解决此问题的一个简单方法是递归解决。下面是一个示例代码

<?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, []);

请注意,此bruteforce递归解决方案不适用于较大的t。存在一些动态规划解决方案,可以解决较大范围内的数字问题。

感觉像是编程挑战。。恐怕任何人都会为您编写代码。在搜索框中键入“整数分区”将返回1324个结果。你确定这些问题和答案对你都没有帮助吗?感觉像是编程上的挑战。。恐怕任何人都会为您编写代码。在搜索框中键入“整数分区”将返回1324个结果。你确定这些问题和答案对你都没有帮助吗?