谁帮我写个函数方法

qq4473169 2012-01-16 11:44:52
最近在研究彩票的问题,有一个关于复式数的分解问题始终在困扰我。

例子

/**
比如4个号码分解成3个号码和2个号码
4码:[1,2,3,4] 一组号码
分解成3码后:[1,2,3] [1,2,4] [1,3,4] [2,3,4] 四组三位数的号码
分解成2码后:[1,2] [1,3] [1,4] [2,3] [2,4] [3,4] 六组二位数的号码
不考虑位置

又如5个号码分解成4个号码
4码:[1,2,3,4,5] 一组号码
分解成4码后:[1,2,3,4] [1,2,3,5] [1,2,4,5] [1,3,4,5] [2,3,4,5]四组四位数的号码
分解成3码后:[1,2,3] [1,2,4] [1,2,5] [1,3,4] [1,3,5] [1,4,5] [2,3,4] [2,3,5] [2,4,5] [3,4,5] 十组三位数的号码
分解成2码后:[1,2] [1,3] [1,4] [1,5] [2,3] [2,4] [2,5] [3,4] [3,5] [4,5] 十组二位数的
-------------------------------------------------
大家应该看出规律了吧
谁能帮我写个方法
array lottery(array $num, int $i){
}
@param $num 是指一组数字
@param $i 是指分解的码数
返回结果数组


$arr1 = lottery(array(1,2,3,4,5), 4);
$arr2 = lottery(array(1,2,3,4,5), 3);
此时
$arr1 的值应该是一个数组
[1,2,3,4] [1,2,3,5] [1,2,4,5] [1,3,4,5] [2,3,4,5]
而$arr2 的值也是一个数组
分解成3码后:[1,2,3] [1,2,4] [1,2,5] [1,3,4] [1,3,5] [1,4,5] [2,3,4] [2,3,5] [2,4,5] [3,4,5]




这个问题我反复研究过,貌似挺难的。。过年了,给66分,祝答题者六六大顺
*/
...全文
125 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-01-17
  • 打赏
  • 举报
回复
这是求 m 取 n (n<=m)的组合,现成的代码很多
ematphp 2012-01-17
  • 打赏
  • 举报
回复
2楼的效率还是蛮高的!
ZT_King 2012-01-17
  • 打赏
  • 举报
回复
我复制贴过来吧, 这个实现还是比较高效的算法.

function Combination($arr, $size = 1) {
$len = count($arr);
$max = pow(2,$len) - pow(2,$len-$size);
$min = pow(2,$size)-1;

$r_arr = array();
for ($i=$min; $i<=$max; $i++){
$count = 0;
$t_arr = array();
for ($j=0; $j<$len; $j++){
$a = pow(2, $j);
$t = $i&$a;
if($t == $a){
$t_arr[] = $arr[$j];
$count++;
}
}
if($count == $size){
$r_arr[] = $t_arr;
}
}
return $r_arr;
}
$r = Combination(array(1,2,3,4,5),3);
echo '<pre>';
print_r($r);
echo '</pre>';
/*
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)

[1] => Array
(
[0] => 1
[1] => 2
[2] => 4
)

[2] => Array
(
[0] => 1
[1] => 3
[2] => 4
)

[3] => Array
(
[0] => 2
[1] => 3
[2] => 4
)

[4] => Array
(
[0] => 1
[1] => 2
[2] => 5
)

[5] => Array
(
[0] => 1
[1] => 3
[2] => 5
)

[6] => Array
(
[0] => 2
[1] => 3
[2] => 5
)

[7] => Array
(
[0] => 1
[1] => 4
[2] => 5
)

[8] => Array
(
[0] => 2
[1] => 4
[2] => 5
)

[9] => Array
(
[0] => 3
[1] => 4
[2] => 5
)

)
*/



20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧