考虑一个数组(2,3,4,5)
我需要制作像
这样的组合 (2,60),(6,20),(24,5),(10,12),(30,4) (8,15)
=因子对120
一种解决方案是使用for loop
。一个从0
到currentPos
,另一个从currentPos
到N
(其中N是因子数组的计数,在这种情况下为4)
for($i=$pos;$i>=0;$i--)
{
$p1 = $p1 * $factorArr[$i];
}
for($j=$pos;$j<=$N;$j++)
{
$p2 = $p2 * $factorArr[$j];
}
$ pos增加的地方
有谁知道在PHP中更好的方法吗?
答案 0 :(得分:1)
以下代码将获得所有组合而不重复:
$factor = 5;
$arr = range(1, $factor); // (1,2,3,4,5)
$f = array_product($arr);
$pairs = array();
$unique = array();
for($i = 1; $i < $f/2; $i++){ // only need to check until half (the other half would repeat the values
// if not divisable / already found
if($f % $i != 0 || isset($unique[$i]) || isset($unique[$f/$i])){
continue;
}
$pairs[] = array( $i, $f/$i );
$unique[$i] = true;
}
结果($pairs
):
Array
(
[0] => Array
(
[0] => 1
[1] => 120
)
[1] => Array
(
[0] => 2
[1] => 60
)
[2] => Array
(
[0] => 3
[1] => 40
)
[3] => Array
(
[0] => 4
[1] => 30
)
[4] => Array
(
[0] => 5
[1] => 24
)
[5] => Array
(
[0] => 6
[1] => 20
)
[6] => Array
(
[0] => 8
[1] => 15
)
[7] => Array
(
[0] => 10
[1] => 12
)
)
在行动here中查看。
如果您在问题中需要它,可以使用以下代码:
$p = array();
foreach($pairs as $pair){
$p[] = sprintf('(%s,%s)', $pair[0], $pair[1]);
}
结果($p
):
Array
(
[0] => (1,120)
[1] => (2,60)
[2] => (3,40)
[3] => (4,30)
[4] => (5,24)
[5] => (6,20)
[6] => (8,15)
[7] => (10,12)
)
旁注:您可以在第一个代码中执行此操作 - 无需为此创建另一个循环(在$pairs[] = array( $i, $f/$i );
之后,您可以使用$p[] = sprintf('(%s,%s)', $i, $f/$i);
。
答案 1 :(得分:0)
你只需要一个循环。如果您已经拥有所有因素,那么您需要的只是阵列上的foreach循环。这是一个输出对的示例,但您可以将除法运算中的值分配给另一个变量或另一个数组等。如果您需要发现这些因素,它只是略有不同,但是是一个不同的问题。
$number = 120;
$factors = [1,2,3,4,5,8,10];
foreach($factors as $factor){
echo "($factor," . $number/$factor . ")\n</br>";
}