高分求一个算法,在线等待中... 本帖最后由 sibang 于 2013-10-16 22:08:17 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $arr=Array( Array('a','b','c'), Array('d','e','f'), Array('g','h','i'), //第二層array的個數是未知的,爲了方便舉例所以只寫了3個); print_r(iArray($arr,3));print_r(iArray($arr,2)); function iArray($ar, $n) { if($n == 2) { //3取2的组合 $ar = array( array($ar[0], $ar[1]), array($ar[0], $ar[2]), array($ar[1], $ar[2]), ); }else $ar = array($ar); $res = array(); foreach($ar as $d) { $r = array_pop($d); while($d) { $t = array(); foreach(array_pop($d) as $x) foreach($r as $y) $t[] = $x . $y; $r = $t; } $res = array_merge($res, $r); } return $res;}Array( [0] => adg [1] => adh [2] => adi [3] => aeg [4] => aeh [5] => aei [6] => afg [7] => afh [8] => afi [9] => bdg [10] => bdh [11] => bdi [12] => beg [13] => beh [14] => bei [15] => bfg [16] => bfh [17] => bfi [18] => cdg [19] => cdh [20] => cdi [21] => ceg [22] => ceh [23] => cei [24] => cfg [25] => cfh [26] => cfi)Array( [0] => ad [1] => ae [2] => af [3] => bd [4] => be [5] => bf [6] => cd [7] => ce [8] => cf [9] => ag [10] => ah [11] => ai [12] => bg [13] => bh [14] => bi [15] => cg [16] => ch [17] => ci [18] => dg [19] => dh [20] => di [21] => eg [22] => eh [23] => ei [24] => fg [25] => fh [26] => fi) 數據可能是:$arr=Array( Array('a','b','c','j'), Array('d','e','f'), Array('g','h','i'), Array('k','l','m'),);也可能是:$arr=Array( Array('a','b','c','j'), Array('d','e','f'), Array('g','h','i'), Array('k','l','m'), Array('2','1','3','sd','ee'),); iArray($ar,$n)$n的取值範圍是: 2~6 我在代码中已经提示了要先求一下 M取N 的组合而求组合的函数相信你的代码库中已经是有的这是我用的// combination 组合function combination( $arr, $num=0) { $len = count($arr); if($num == 0) $num = $len; $res = array(); for($i=1,$n=pow(2, $len);$i<$n;++$i) { $tmp = str_pad(base_convert($i, 10, 2), $len, '0', STR_PAD_LEFT); $t = array(); for($j=0;$j<$len;++$j) { if($tmp{$j} == '1') { $t[] = $arr[$j]; } } if(count($t) == $num) $res[] = $t; } return $res;}所以 iArray 函数就可写作function iArray($ar, $n) { $res = array(); foreach(combination($ar, $n) as $d) { $r = array_pop($d); while($d) { $t = array(); foreach(array_pop($d) as $x) foreach($r as $y) $t[] = $x . $y; $r = $t; } $res = array_merge($res, $r); } return $res;} 请教一个关于用cURL实现文件上传的问题? 求一段源码 SPL有无这样功能的函数 配直文档里头URL路径重写 复选框取值问题 请教:做了一个文章发布系统:行间距问题 救命啊,我的PHP传不了值啊,在线等~~~~ javascript偉值給 php 的問題,大家幫忙看看!! 图片压缩的问题 PHP Smarty 刷新 html 局部内容 php数据问题,请教高手! 请问php能不能读写客户端的cookies?
Array('a','b','c'),
Array('d','e','f'),
Array('g','h','i'),
//第二層array的個數是未知的,爲了方便舉例所以只寫了3個
);
print_r(iArray($arr,3));
print_r(iArray($arr,2));
function iArray($ar, $n) {
if($n == 2) { //3取2的组合
$ar = array(
array($ar[0], $ar[1]),
array($ar[0], $ar[2]),
array($ar[1], $ar[2]),
);
}else $ar = array($ar);
$res = array();
foreach($ar as $d) {
$r = array_pop($d);
while($d) {
$t = array();
foreach(array_pop($d) as $x)
foreach($r as $y) $t[] = $x . $y;
$r = $t;
}
$res = array_merge($res, $r);
}
return $res;
}
Array
(
[0] => adg
[1] => adh
[2] => adi
[3] => aeg
[4] => aeh
[5] => aei
[6] => afg
[7] => afh
[8] => afi
[9] => bdg
[10] => bdh
[11] => bdi
[12] => beg
[13] => beh
[14] => bei
[15] => bfg
[16] => bfh
[17] => bfi
[18] => cdg
[19] => cdh
[20] => cdi
[21] => ceg
[22] => ceh
[23] => cei
[24] => cfg
[25] => cfh
[26] => cfi
)
Array
(
[0] => ad
[1] => ae
[2] => af
[3] => bd
[4] => be
[5] => bf
[6] => cd
[7] => ce
[8] => cf
[9] => ag
[10] => ah
[11] => ai
[12] => bg
[13] => bh
[14] => bi
[15] => cg
[16] => ch
[17] => ci
[18] => dg
[19] => dh
[20] => di
[21] => eg
[22] => eh
[23] => ei
[24] => fg
[25] => fh
[26] => fi
)
$arr=Array(
Array('a','b','c','j'),
Array('d','e','f'),
Array('g','h','i'),
Array('k','l','m'),
);也可能是:
$arr=Array(
Array('a','b','c','j'),
Array('d','e','f'),
Array('g','h','i'),
Array('k','l','m'),
Array('2','1','3','sd','ee'),
);
$n的取值範圍是: 2~6
而求组合的函数相信你的代码库中已经是有的
这是我用的// combination 组合
function combination( $arr, $num=0) {
$len = count($arr);
if($num == 0) $num = $len;
$res = array();
for($i=1,$n=pow(2, $len);$i<$n;++$i) {
$tmp = str_pad(base_convert($i, 10, 2), $len, '0', STR_PAD_LEFT);
$t = array();
for($j=0;$j<$len;++$j) {
if($tmp{$j} == '1') {
$t[] = $arr[$j];
}
}
if(count($t) == $num) $res[] = $t;
}
return $res;
}所以 iArray 函数就可写作function iArray($ar, $n) {
$res = array();
foreach(combination($ar, $n) as $d) {
$r = array_pop($d);
while($d) {
$t = array();
foreach(array_pop($d) as $x)
foreach($r as $y) $t[] = $x . $y;
$r = $t;
}
$res = array_merge($res, $r);
}
return $res;
}