php - 在数字之间放置 +、- 或什么都没有的所有可能性,以获得等于 100 的总和
问题描述
我必须构建一个函数,它会列出在 1 到 9 的数字之间放置 + 或 - 的所有可能性并打印结果。
例如:1+2+3+4+5+6+7+8+9=45、1+2+3+4+5+6+7+8-9=25、1+2+3+4 +5+6+7+89=117、1+2+3+45-67+89=73 以此类推。
在注意每个表达式必须包含 1 到 9 之间的所有数字的同时,序列也应该是完整的。下面是我实现结果的代码,但它不会生成所有可能的组合。
$characters = ['+', '-', ''];
$opr[0] = $characters[0];
$opr[1] = $characters[0];
$opr[2] = $characters[0];
$opr[3] = $characters[0];
$opr[4] = $characters[0];
$opr[5] = $characters[0];
$opr[6] = $characters[0];
$opr[7] = $characters[0];
for($j=0;$j<=7;$j++) {
for($l=7;$l>=0;$l--) {
for($i=0;$i<=2;$i++) {
if( $l !== $j ) {
$opr[$l] = $characters[$i];
}
$string = "1".$opr[0]."2".$opr[1]."3".$opr[2]."4".$opr[3]."5".$opr[4]."6".$opr[5]."7".$opr[6]."8".$opr[7]."9";
$sum = eval('return '.$string.';');
echo $string."="."$sum<br />";
}
}
}
这是我的代码的输出:
1+2+3+4+5+6+7+8+9=45
1+2+3+4+5+6+7+8-9=27
1+2+3+4+5+6+7+89=117
1+2+3+4+5+6+7+89=117
1+2+3+4+5+6+7-89=-61
1+2+3+4+5+6+789=810
1+2+3+4+5+6+789=810
1+2+3+4+5+6-789=-768
1+2+3+4+5+6789=6804
1+2+3+4+5+6789=6804
1+2+3+4+5-6789=-6774
1+2+3+4+56789=56799
1+2+3+4+56789=56799
1+2+3+4-56789=-56779
1+2+3+456789=456795
1+2+3+456789=456795
1+2+3-456789=-456783
1+2+3456789=3456792
1+2+3456789=3456792
1+2-3456789=-3456786
1+23456789=23456790
1+23456789=23456790
1+23456789=23456790
1+23456789=23456790
1+2345678+9=2345688
1+2345678-9=2345670
1+23456789=23456790
1+234567+89=234657
1+234567-89=234479
1+23456789=23456790
1+23456+789=24246
1+23456-789=22668
1+23456789=23456790
1+2345+6789=9135
1+2345-6789=-4443
1+23456789=23456790
1+234+56789=57024
1+234-56789=-56554
1+23456789=23456790
1+23+456789=456813
1+23-456789=-456765
1+23456789=23456790
1+23456789=23456790
1+23456789=23456790
1+23456789=23456790
1+23456789=23456790
1-23456789=-23456788
123456789=123456789
12345678+9=12345687
12345678-9=12345669
123456789=123456789
1234567+89=1234656
1234567-89=1234478
123456789=123456789
123456+789=124245
123456-789=122667
123456789=123456789
12345+6789=19134
12345-6789=5556
123456789=123456789
1234+56789=58023
1234-56789=-55555
123456789=123456789
123456789=123456789
123456789=123456789
123456789=123456789
12+3456789=3456801
12-3456789=-3456777
123456789=123456789
1+23456789=23456790
1-23456789=-23456788
123456789=123456789
12345678+9=12345687
12345678-9=12345669
123456789=123456789
1234567+89=1234656
1234567-89=1234478
123456789=123456789
123456+789=124245
123456-789=122667
123456789=123456789
12345+6789=19134
12345-6789=5556
123456789=123456789
123456789=123456789
123456789=123456789
123456789=123456789
123+456789=456912
123-456789=-456666
123456789=123456789
12+3456789=3456801
12-3456789=-3456777
123456789=123456789
1+23456789=23456790
1-23456789=-23456788
123456789=123456789
12345678+9=12345687
12345678-9=12345669
123456789=123456789
1234567+89=1234656
1234567-89=1234478
123456789=123456789
123456+789=124245
123456-789=122667
123456789=123456789
123456789=123456789
123456789=123456789
123456789=123456789
1234+56789=58023
1234-56789=-55555
123456789=123456789
123+456789=456912
123-456789=-456666
123456789=123456789
12+3456789=3456801
12-3456789=-3456777
123456789=123456789
1+23456789=23456790
1-23456789=-23456788
123456789=123456789
12345678+9=12345687
12345678-9=12345669
123456789=123456789
1234567+89=1234656
1234567-89=1234478
123456789=123456789
123456789=123456789
123456789=123456789
123456789=123456789
12345+6789=19134
12345-6789=5556
123456789=123456789
1234+56789=58023
1234-56789=-55555
123456789=123456789
123+456789=456912
123-456789=-456666
123456789=123456789
12+3456789=3456801
12-3456789=-3456777
123456789=123456789
1+23456789=23456790
1-23456789=-23456788
123456789=123456789
12345678+9=12345687
12345678-9=12345669
123456789=123456789
123456789=123456789
123456789=123456789
123456789=123456789
123456+789=124245
123456-789=122667
123456789=123456789
12345+6789=19134
12345-6789=5556
123456789=123456789
1234+56789=58023
1234-56789=-55555
123456789=123456789
123+456789=456912
123-456789=-456666
123456789=123456789
12+3456789=3456801
12-3456789=-3456777
123456789=123456789
1+23456789=23456790
1-23456789=-23456788
123456789=123456789
123456789=123456789
123456789=123456789
123456789=123456789
1234567+89=1234656
1234567-89=1234478
123456789=123456789
123456+789=124245
123456-789=122667
123456789=123456789
12345+6789=19134
12345-6789=5556
123456789=123456789
1234+56789=58023
1234-56789=-55555
123456789=123456789
123+456789=456912
123-456789=-456666
123456789=123456789
12+3456789=3456801
12-3456789=-3456777
123456789=123456789
1+23456789=23456790
1-23456789=-23456788
123456789=123456789
它产生了一些组合,但不是所有可能的组合
解决方案
您可以通过递归来做到这一点 - 使用以下代码:
<?php
function addNum($baseStr, $nextNum)
{
if ($nextNum == 10)
return array($baseStr);
$arr1 = addNum($baseStr. '+' . $nextNum, $nextNum+1);
$arr2 = addNum($baseStr. '-' . $nextNum, $nextNum+1);
$arr3 = addNum($baseStr. '' . $nextNum, $nextNum+1);
return array_merge($arr1, $arr2, $arr3);
}
$permutation = addNum('1', 2);
foreach ($permutation as $perm)
{
$res = eval("return $perm;");
echo $perm . '=' . $res . "\n";
}
?>
推荐阅读
- css - 来自 notistack 的 React Snackbar Compnent 无法在其 GUI 中处理长文本,因为在小窗口大小的情况下文本会消失
- javascript - 使用 FormGroup 时角度材料自动完成不起作用
- java - 在android上加载webview后没有显示插页式广告?
- java - Paho MQTT:找不到基本名称 org.eclipse.paho.client.mqttv3.internal.nls.logcat 的捆绑包
- proxy - Trickle ICE test page doesn't work or my setup is wrong?
- angular - angular2-highcharts 在 Angular 11 中不起作用
- neo4j - Py2neo push() 函数不更新 neo4j 中的节点
- ruby - Ruby Sinatra 编译错误:找不到服务器处理程序(thin、puma、reel、HTTP、webrick)。(运行时错误)
- spring-boot - 使用容器映像在 AWS Lambda 上运行 Spring boot graalvm 本机映像时出现问题
- ajax - Fuseki 查询 - 加载资源失败:服务器响应状态为 403(禁止)