zoukankan      html  css  js  c++  java
  • PHP 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来

     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 ?>
  • 相关阅读:
    图解C/C++多级指针与多维数组
    排序---选择排序
    排序---插入排序
    排序---希尔排序
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    如何阅读Django文档?
    机器学习 第一章 绪论 笔记
    python工程实践·笔记
    Python后端开发面经
  • 原文地址:https://www.cnblogs.com/zemliu/p/2710309.html
Copyright © 2011-2022 走看看