PHP 輸入兩個整數n 和m,從數列1,2,3…….n 中隨意取幾個數, 使其和等於m ,要求將其中所有的可能組合列出來

來源:互聯網
上載者:User
 1 <?php 2     #輸入sum和n,要求輸出1,2...n裡所有和為sum的組合 3     #這是一個可劃分子問題問題 4     #若用f(sum, n)表示問題的界,則元素組合共有兩種情況 5     #1. 和為sum的組合裡包括n,則f(sum, n) = f(sum - n, n - 1) 6     #2. 和為sum的組合裡不包括n,則 f(sum, n) = f(sum, n - 1) 7     #所以 f(sum, n) = f(sum - n, n - 1) U f(sum, n - 1) 8  9     function combination($sum, $n, $comb) {10         if ($n < 0 || $sum < 0) {11             #當n < 0或者sum < 0都是不合格結果12             // print_r($comb);13             // echo "sum: {$sum} n: {$n}<br>";14             return;15         }16 17         if ($sum < $n) {18             combination($sum, $sum, $comb); #sum < n,則不可能需要比sum大的數來構成組合19             return;20         }21         22         #結果求得23         if ($sum == 0) {24             #輸出元素組合25             echo "Combination: ";26             foreach ($comb as $val) {27                 echo $val . " ";28             }29             echo "<br>";30             return;31         }32 33         #組合裡包含n的情況34         $comb[] = $n;35         combination($sum - $n, $n - 1, $comb);36 37         #組合裡不包含n的情況38         array_pop($comb);39         combination($sum, $n - 1, $comb);40     }41 42     combination(10, 15, array());43 ?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.