个数很容易求,n!/m!(n-m)!(n>m,m>0)但这里要求列出来谢谢

解决方案 »

  1.   

    例子:n=123,所有组合是:
    m=1
    1,2,3,
    m=2
    12,13,23,
    m=3
    123
      

  2.   

    n={1,2,3,4}
    m=1:1,2,3,4
    m=2:12,13,14,23,24,34
    m=3:123,124,134,234,
    m=4:1234
      

  3.   

    $arr = array(1, 2, 3, 4);
    composeList($arr, 2);
    function composeList($from = array(), $num = 0, $to = array())
    {
    if(($count = count($to)) == $num)
    {
    echo join(',', $to) . '<br />';
    return;
    }
    if($num < 0 || ($count == 0 && count($from) < $num))
    {
    echo 'Err';
    return;
    }
    foreach($from AS $k => $v)
    {
    $to[] = $v;
    unset($from[$k]);
    composeList($from, $num, $to);
    array_pop($to);
    }
    }
      

  4.   

    /**
     * 获得组合数
     * @param  $elements     可选的数
     * @param  $chosen     每个组合的个数
     * @return $result     可生成的组合
     */
    function array_combination(array $elements, $chosen)
    {
    $result = array();
    if(count($elements)<=$chosen)return array($elements);
    $elements=array_values($elements);
    for ($i = 0; $i < $chosen;   $i++) { $vecm[$i] = $i; }
    for ($i = 0; $i < $chosen-1; $i++) { $vecb[$i] = $i; }
    $vecb[$chosen - 1] = count($elements) - 1;
    $rs=array();
            foreach ($vecm as $key=>$v)$rs[$key]=$elements[$v];
            $result[] = $rs;

    $ = $chosen - 1;
    while (true) {
        if ($ == 0) {
            $vecm[0]++;
            $rs=array();
            foreach ($vecm as $key=>$v)$rs[$key]=$elements[$v];
            $result[] = $rs;
            if ($vecm[0] == $vecb[0]) {
                for ($i = 1; $i < $chosen; $i++) {
                    if ($vecm[$i] < $vecb[$i]) {
                        $ = $i;
                        break;
                    }
                }
                if (($i == $chosen) && ($vecm[$chosen - 1] == $vecb[$chosen - 1])) { break; }
            }
        } else {
            $vecm[$]++;
            $--;
            for ($i = 0; $i <= $; $i++) {
                $vecb[$i] = $vecm[$i] = $i;
            }
            $vecb[$] = $vecm[$ + 1] - 1;
            $rs=array();
            foreach ($vecm as $key=>$v)$rs[$key]=$elements[$v];
            $result[] = $rs;
        }
    }
    return $result;
    }
      

  5.   

    有php高手的 
    收藏!!