【问题标题】:Using PHP function to solve for a missing numbers [closed]使用 PHP 函数解决丢失的数字 [关闭]
【发布时间】:2012-11-30 20:55:01
【问题描述】:

我有一个 16 个号码池 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768。我有一个数字,它由 16 个数字的某种组合组成,其中 1 - 16 个数字相加。例如,我有一个由 1+2+4+8+16+128+512 组成的数字 671。我试图找出一种方法来获取我的 16 个数字池和我的总数,并确定哪些数字用于构成该总数。我将使用 php 来执行此操作,但我曾尝试过搜索,而数学远非我的强项,我试图找到解决此问题的方法却一无所获。

【问题讨论】:

  • 简单的十进制到二进制转换器。这只是一个减法的问题。

标签: php function formula equation


【解决方案1】:

这是典型的Subset sum problem

你可以有一个简单的回溯来实现这个

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;
}

【讨论】:

  • 正是我想要的,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多