汽水瓶换汽水 算法解析

汽水瓶换汽水 算法解析
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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 假如有这么一个问题,1瓶汽水1块钱,2个空瓶可以兑换一瓶汽水,问n块钱可以兑换多少瓶汽水? 考虑整个过程就是用空瓶...
    mysimplebook阅读 4,927评论 0 0
  • [编程题] 汽水瓶 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以...
    icecrea阅读 4,272评论 0 6
  • title: 华为软件笔试---汽水瓶编程localimage: image1urlname: huawei-qi...
    梦走云端阅读 2,839评论 0 0
  • 今天又如约而至早餐,做的越来越精致,颜值担当,身体被滋养,心情也美醉了,30天那天一定要给自己一个大大的奖励,奖励...
    花精灵_洁宝阅读 1,631评论 0 3
  • 抗衡时光之外, 为独活。 倾心为一人,一世界, 满腹思念,才会思念,便害思念。 一心是他的少年青丝, 戎装白马, ...
    慕蓉暖兒阅读 2,241评论 0 2