美文网首页
汽水瓶换汽水 算法解析

汽水瓶换汽水 算法解析

作者: 王小滔 | 来源:发表于2019-11-24 12:20 被阅读0次

    汽水瓶换汽水 算法解析
    1元买2瓶汽水,2个汽水瓶换1瓶汽水,
    问5元总共能得多少瓶汽水

    循环算法

    /* 
     * 汽水瓶 循环算法 
     * $n:当前汽水总数, $c:换1瓶汽水需要空瓶数 
     */ 
    function get_total($n, $c) 
    { 
        $total = $n; 
        while ($n >= $c) { 
            $t = intval($n / $c); 
            $total += $t; 
            $n = $t + $n % $c; 
            echo "累计汽水数:" . $total . " 当前空瓶数:" . $n . "<br>"; 
        } 
        // 如最后只差1空瓶可以换汽水,则先借1瓶汽水,喝完汽水还回空瓶 
        if ($c - $n == 1) { 
            $total += 1; 
            $n = 0; 
        } 
        return "最终汽水数:" . $total . ",最终空瓶数:" . $n; 
    } 
    

    累计汽水数:15 当前空瓶数:5
    累计汽水数:17 当前空瓶数:3
    累计汽水数:18 当前空瓶数:2
    累计汽水数:19 当前空瓶数:1
    最终汽水数:20,最终空瓶数:0

    递归算法

     /* 
     * 递归算法 
     * $n:当前空瓶总数, $c:换1瓶汽水需要空瓶数 
     */ 
    function recursive($n, $c) 
    { 
        //至少差两个空瓶,不能换汽水 
        if ($c - $n > 1) { 
            return 0; 
        } elseif ($c - $n == 1) { 
            //差一个空瓶,可以先喝汽水后给瓶 
            return 1; 
        } else { 
            return intval($n / $c) + recursive(intval($n / $c) + $n % $c, $c); 
        } 
    }
    

    汽水瓶换汽水数:10
    总共汽水数:20

    数学算法
    公式:换得汽水数 = 汽水瓶数 / (换汽水需要瓶数 - 1)

    /* 
     * 汽水瓶 数学算法 
     * $n:当前汽水总数, $c:换1瓶汽水需要空瓶数 
     */
    function bottle($n, $c) 
    { 
        return $n + intval($n / ($c - 1)); 
    } 
    

    总共得汽水数:20

    相关文章

      网友评论

          本文标题:汽水瓶换汽水 算法解析

          本文链接:https://www.haomeiwen.com/subject/gdrlwctx.html