我试图找出如何循环出x个整数的可能组合来总结一个特定的数字。
让我们说,我有7号,我需要弄清楚如何用成对3中的整数来加总这个数字。 1 + 2 + 4 = 7
3 + 3 + 1 = 7
5 + 1 + 1 = 7
2 + 2 + 3 = 7
重复的数字组合对我不感兴趣,例如:
1 + 2 + 4 = 7
2 + 4 + 1 = 7
4 + 2 + 1 = 7
任何人都对我应该如何达到这个结果有任何想法? 感谢。
答案 0 :(得分:0)
你可以试试这个算法
$ans = array();
for($i=1;$i<=5;$i++)
{
$i1 = 7-$i;
$i2 = intval($i1 - $i);
$value = $i."+".$i1."+".$i2;
$ans = array_unshift($ans,$value);
}
print_r($ans);
希望这会有所帮助。请告诉我
答案 1 :(得分:0)
以下是您的问题的解决方案。
function printPartitions($target, $max, $s){
if($target === 0 )
echo $s;
else
{
if($max > 1)
{
printPartitions($target, $max-1, $s);
}
if($max <= $target)
{
printPartitions($target-$max, $max, $max . " " . $s);
}
}
}
printPartitions(5, 5, "<br/>");
您必须指定$ target Value,$ max value。
e.g。
printPartitions(7, 7, "<br/>");
它会为您提供如下输出:
1 1 1 1 1 1 1
1 1 1 1 1 2
1 1 1 2 2
1 2 2 2
1 1 1 1 3
1 1 2 3
2 2 3
1 3 3
1 1 1 4
1 2 4
3 4
1 1 5
2 5
1 6
7
答案 2 :(得分:0)
我已经解决了我的问题。如果有人需要,我觉得我应该在这里默默分享。我的解决方案基于以下帖子:https://stackoverflow.com/a/19067884/3293843
<?php
function sampling($chars, $size, $combinations = array()) {
# if it's the first iteration, the first set
# of combinations is the same as the set of characters
if (empty($combinations)) {
$combinations = $chars;
}
# we're done if we're at size 1
if ($size == 1) {
return $combinations;
}
# initialise array to put new values in
$new_combinations = array();
# loop through existing combinations and character set to create strings
foreach ($combinations as $combination) {
foreach ($chars as $char) {
$new_combinations[] = $combination .'@'. $char;
}
}
# call same function again for the next iteration
return sampling($chars, $size - 1, $new_combinations);
}
// example
$chars = array('1', '2', '3','4');
$target = 7;
$maxLengthOfIntegers = 3;
$output = sampling($chars, $maxLengthOfIntegers);
$repeatedEntries = array();
//presenting the output
foreach($output as $out){
$explodeOut = explode('@',$out);
sort($explodeOut);
if(array_sum($explodeOut) == $target){
$sortedPattern = implode('',$explodeOut);
if(!in_array($sortedPattern,$repeatedEntries)){
echo $sortedPattern.'<br/>';
$repeatedEntries[] = $sortedPattern;
}
}
}
?>
感谢您的时间和精力。
此致 雅各布