使用PHP函数来解决丢失的数字

时间:2012-11-30 20:55:02

标签: php function formula equation

我有一个16个数字池1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768。我有一个由16个数字组合而成的数字,其中1到16个加起来。例如,我有一个数字671,由1 + 2 + 4 + 8 + 16 + 128 + 512组成。我试图找出一种方法来获取我的16个数字池和我的总数,并确定使用哪个数字来计算总数。我将使用php来做这个我怎么试过搜索和数学远远不是我强大的西装我已经空出来试图找到解决这个问题的方法。

1 个答案:

答案 0 :(得分:2)

这是典型的Subset sum problem

enter image description here

您可以使用简单的回溯来实现此目的

echo "<pre>";
$ns = array(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768);
print_r(subsetSum($ns, 671 ));

输出

Array
(
    [0] => 1 + 2 + 4 + 8 + 16 + 128 + 512
)

使用的功能

function subsetSum($arr, $val, $i = 0) {
    $r = array();
    while($i < count($arr)) {
        $v = $arr[$i];
        if($v == $val)
            $r[] = $v;
        if($v < $val)
            foreach(subsetSum($arr, $val - $v, $i + 1) as $s)
            $r[] = "$v + $s";
        $i++;
    }
    return $r;
}