从M中取N个就由楼主自己写了。
下面是排列组合的代码。希望对你有用。<?php
$n = array(1,3,5,7,9);
$rs = array();/**
递归函数,参数
$ar 数据数组
$m 组合串的长度
$s 工作变量,用于缓存中间量
**/
function foo($ar,$m,$s='') {
global $rs;
if($m == 0) {
$rs[] = $s; //如果长度够了则赋值
}else {
for($i=0;$i<count($ar);$i++) {
foo($ar,$m-1,$s.$ar[$i]); //递归
}
}
}foo($n,2);
print_r($rs);//顺序数组
shuffle( $rs );
print_r($rs);//打乱数组?>
下面是排列组合的代码。希望对你有用。<?php
$n = array(1,3,5,7,9);
$rs = array();/**
递归函数,参数
$ar 数据数组
$m 组合串的长度
$s 工作变量,用于缓存中间量
**/
function foo($ar,$m,$s='') {
global $rs;
if($m == 0) {
$rs[] = $s; //如果长度够了则赋值
}else {
for($i=0;$i<count($ar);$i++) {
foo($ar,$m-1,$s.$ar[$i]); //递归
}
}
}foo($n,2);
print_r($rs);//顺序数组
shuffle( $rs );
print_r($rs);//打乱数组?>
(
[0] => 11
[1] => 13
[2] => 15
[3] => 17
[4] => 19
[5] => 31
[6] => 33
[7] => 35
[8] => 37
[9] => 39
[10] => 51
[11] => 53
[12] => 55
[13] => 57
[14] => 59
[15] => 71
[16] => 73
[17] => 75
[18] => 77
[19] => 79
[20] => 91
[21] => 93
[22] => 95
[23] => 97
[24] => 99
)
Array
(
[0] => 97
[1] => 77
[2] => 55
[3] => 57
[4] => 53
[5] => 95
[6] => 19
[7] => 13
[8] => 99
[9] => 51
[10] => 35
[11] => 33
[12] => 59
[13] => 93
[14] => 73
[15] => 37
[16] => 75
[17] => 79
[18] => 15
[19] => 17
[20] => 31
[21] => 11
[22] => 71
[23] => 91
[24] => 39
)
从m个球中(球从1到m编号)任取n个球出来。
1.显示所有可能的取法。
2.显示n个球的从小到大编号结果。
看看其它高手怎么做
$n = array(1,3,5,7,9);
$rs = $rs2 = array();/**
递归函数,参数
$ar 数据数组
$m 组合串的长度
$s 工作变量,用于缓存中间量
**/
function foo($ar,$m,$s='') {
global $rs, $rs2;
if($m == 0) {
$rs[] = $s; //如果长度够了则赋值
preg_match_all( "/./", $s, $rsar );
$rs2[] = $rsar[0];
}else {
for($i=0;$i<count($ar);$i++) {
foo($ar,$m-1,$s.$ar[$i]); //递归
}
}
}foo($n,2);
//print_r($rs);//顺序数组
print_r($rs2);//顺序数组
//shuffle( $rs );
//print_r($rs);//打乱数组
//去掉相似
$uq = array();
foreach( $rs2 as $key=>$val ) {
$flag = 1;
foreach( $uq as $k=>$v ) {
if( array_diff( $val, $v ) ) continue;
else $flag = 0;
}
if( $flag )
$uq[] = $val;
}
print_r($uq);
?>//输出结果
Array
(
[0] => Array
(
[0] => 1
[1] => 1
) [1] => Array
(
[0] => 1
[1] => 3
) [2] => Array
(
[0] => 1
[1] => 5
) [3] => Array
(
[0] => 1
[1] => 7
) [4] => Array
(
[0] => 1
[1] => 9
) [5] => Array
(
[0] => 3
[1] => 1
) [6] => Array
(
[0] => 3
[1] => 3
) [7] => Array
(
[0] => 3
[1] => 5
) [8] => Array
(
[0] => 3
[1] => 7
) [9] => Array
(
[0] => 3
[1] => 9
) [10] => Array
(
[0] => 5
[1] => 1
) [11] => Array
(
[0] => 5
[1] => 3
) [12] => Array
(
[0] => 5
[1] => 5
) [13] => Array
(
[0] => 5
[1] => 7
) [14] => Array
(
[0] => 5
[1] => 9
) [15] => Array
(
[0] => 7
[1] => 1
) [16] => Array
(
[0] => 7
[1] => 3
) [17] => Array
(
[0] => 7
[1] => 5
) [18] => Array
(
[0] => 7
[1] => 7
) [19] => Array
(
[0] => 7
[1] => 9
) [20] => Array
(
[0] => 9
[1] => 1
) [21] => Array
(
[0] => 9
[1] => 3
) [22] => Array
(
[0] => 9
[1] => 5
) [23] => Array
(
[0] => 9
[1] => 7
) [24] => Array
(
[0] => 9
[1] => 9
))
Array
(
[0] => Array
(
[0] => 1
[1] => 1
) [1] => Array
(
[0] => 1
[1] => 3
) [2] => Array
(
[0] => 1
[1] => 5
) [3] => Array
(
[0] => 1
[1] => 7
) [4] => Array
(
[0] => 1
[1] => 9
) [5] => Array
(
[0] => 3
[1] => 5
) [6] => Array
(
[0] => 3
[1] => 7
) [7] => Array
(
[0] => 3
[1] => 9
) [8] => Array
(
[0] => 5
[1] => 7
) [9] => Array
(
[0] => 5
[1] => 9
) [10] => Array
(
[0] => 7
[1] => 9
))
<?php
$n = array(1,3,5,7,9);
$rs = $rs2 = array();/**
递归函数,参数
$ar 数据数组
$m 组合串的长度
$s 工作变量,用于缓存中间量
**/
function foo($ar,$m,$s='') {
global $rs, $rs2;
if($m == 0) {
$rs[] = $s; //如果长度够了则赋值
preg_match_all( "/./", $s, $rsar );
$rs2[] = $rsar[0];
}else {
for($i=0;$i<count($ar);$i++) {
foo($ar,$m-1,$s.$ar[$i]); //递归
}
}
}foo($n,3);
//print_r($rs);//顺序数组
//print_r($rs2);//顺序数组
//去掉相似
$uq = array();
foreach( $rs2 as $key=>$val ) {
if( array_unique( $val ) != $val ) continue;
$flag = 1;
foreach( $uq as $k=>$v ) {
if ( ! array_diff( $val, $v )){$flag = 0;break;}
}
if( $flag )
$uq[] = $val;
}
print_r($uq);?>//输出结果
Array
(
[0] => Array
(
[0] => 1
[1] => 3
[2] => 5
) [1] => Array
(
[0] => 1
[1] => 3
[2] => 7
) [2] => Array
(
[0] => 1
[1] => 3
[2] => 9
) [3] => Array
(
[0] => 1
[1] => 5
[2] => 7
) [4] => Array
(
[0] => 1
[1] => 5
[2] => 9
) [5] => Array
(
[0] => 1
[1] => 7
[2] => 9
) [6] => Array
(
[0] => 3
[1] => 5
[2] => 7
) [7] => Array
(
[0] => 3
[1] => 5
[2] => 9
) [8] => Array
(
[0] => 3
[1] => 7
[2] => 9
) [9] => Array
(
[0] => 5
[1] => 7
[2] => 9
))
foreach($uq as $value)
{
echo implode(",",$value)."<br>";
}