php - 使用 PHP 查找所有子集总和和组合总和
问题描述
我有这些列表
Level 2 = 23
Level 3 = 34
Level 4 = 45
Level 5 = 56
Level 6 = 68
Level 7 = 79
Level 8 = 90
Level 9 = 101
Level 10 = 112
Level 11 = 123
Level 12 = 134
Level 13 = 145
级别 14 = 156
级别 15 = 168
级别 16 = 179
每个级别的数字用于数组查找所有可能的数字组合以达到给定集合
我的代码
index.html
<html>
<body>
<form method="post" action="compute.php">
Current:
<input type="number" name="number1" />
<input type="submit" name="submit" value="Compute">
</form>
</body>
</html>
compute.php
<?php
$number1 = $_POST['number1'];
$limit = 100000-$number1;
$array = array (23,34,45,56,68,79,90,101,112,123,134,145,156,168,179);
$array = array_filter($array, function($var) use ($limit) {
return ($var <= $limit);
});
rsort($array);
$num = count($array);
$total = pow(2, $num);
$out = array();
for ($i = 0; $i < $total; $i++) {
$comb = array();
for ($j = 0; $j < $num; $j++) {
// is bit $j set in $i?
if (pow(2, $j) & $i){
$comb[] = $array[$j];
}
}
if (array_sum($comb) == $limit)
{
$out[] = $comb;
}
}
array_multisort(array_map('count', $out), SORT_ASC, $out);
$out = array_unique($out, SORT_REGULAR);
$m = 1;
foreach($out as $result)
echo "<b>Possible Answer ". $m++. " : </b> " .implode(', ', $result)."
<br><br>";
?>
</div>
</div>
我的输入和输出
如果我输入 99318
输出如下
可能的答案 1:
168、145、134、123、112 可能的答案 2:
168、156、134、123、101
可能的答案 3:
168、156、145、112、101
我的问题是我的代码找不到组合数组,如果它的重复数字像这样 (112)
可能的答案:168、156、134、112、112
现在我很困惑如何查找和获取重复的数字
以及我如何将“10级”和“exp”这两个词组合到结果中,并像这样组合相同的子集(112)
可能的答案:15级 - 168级经验,14级 - 156级经验,10级 - 134级经验,10级(2x) - 224 经验
解决方案
推荐阅读
- spring - SpringBoot Rest Service 对文件下载的异常处理
- scala - 为什么 Stream.distinct 不明显?
- visual-studio - Visual Studio 中的 emmet 不像在 Sublime 中那样工作
- javascript - 用另一个数组中的值填充数组
- html - PhantomJS 渲染不正确的 PNG 渲染
- python - 熊猫数据框根据条件冻结集
- java - 当程序通过 .jar 文件运行时,JOptionPanel.showMessageDialog 不显示
- matlab - 加速度测量中的重力
- ios - iOS 上的 MLKit 文本检测适用于从 Assets.xcassets 拍摄的照片,但与在相机上拍摄/从相机胶卷上传的照片不同
- istio - 一旦启用了 istio 注入,POD 就无法连接外部端点