【发布时间】:2015-02-12 15:41:38
【问题描述】:
我正在尝试编写一个脚本来执行从 0 到 45 的 6 个数字的所有排列/组合,没有重复,但它不起作用,因为某些数字在同一行重复。
我做错了什么?
代码:
for($a=0; $a<45-5; $a++)
for($b=$a+1; $b<45-4; $b++)
for($c=$b+1; $c<45-3; $c++)
for($d=$c+1; $d<45-2; $d++)
for($e=$d+1; $d<45-1; $d++)
for($f=$e+1; $d<45; $d++)
echo "$a $b $c $d $e $f \n";
我正在测试另一个代码,但收到此错误:
致命错误:允许的内存大小为 33554432 字节已用尽(尝试分配 2348617 字节)
<?php
function permutations($arr,$n)
{
$res = array();
foreach ($arr as $w)
{
if ($n==1) $res[] = $w;
else
{
$perms = permutations($arr,$n-1);
foreach ($perms as $p)
{
$res[] = $w." ".$p."<p>";
}
}
}
return $res;
}
$words = array('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45');
$pe = permutations($words,6);
print_r($pe);
?>
我做错了什么?
谢谢
【问题讨论】:
-
所以
00 01 02..和01 00 02..都应该出现,而不是00 00 01?请记住,45^6 大约是 80 亿。你真的需要 80 亿个结果吗?你肯定会用完内存。 -
是的,我需要所有的组合,不要重复任何数字。我知道有近 9 百万种组合,但我需要将所有这些数字插入数据库或 csv 或文本文件中。
标签: php permutation