编程题分享:假设你手里有20元,一瓶饮料2元,两个空瓶可以换1元,请问最多能喝到多少瓶饮料?

题目:假设你手里有 20 元,一瓶饮料 2 元,两个空瓶可以换 1 元,请问最多能喝到多少瓶饮料?

  • 思路分析:

重点: “2元可买一瓶饮料,4个空瓶可换一瓶饮料”

     ①. 20元买了【10】瓶
     ②. 10个空瓶可以换【2】瓶饮料,且剩2个空瓶
     ③. 此时喝完,一共有4个空瓶,还可以换【1】瓶饮料
     ④. 最后剩下1个空瓶,手里再无剩余
 
     统计所得,一共可以喝到【13】瓶饮料
  • 代码实现

此处以鄙人熟悉的 PHP 语言,整理实现源码如下:

	/**
     * @param int $amount 金额
     * @return array 可以喝到的饮料数,最后剩余的空瓶数
     */
    public function buyFunc($amount = 0){
        //可以喝到的饮料数目,【整数】
        $drink_num = intval($amount/2);
        //空瓶子数目
        $empty_num = $drink_num;

        while ($empty_num >= 4){
            //空瓶子可以换的饮料数【整数】
             $empty_tag = intval($empty_num/4);
             //未使用的空瓶子数目
             $empty_num = $empty_num%4;

             $drink_num+=$empty_tag;
             $empty_num += $empty_tag;
        }
        return [$drink_num,$empty_num];
    }
  • 测试代码:
list($drink_num,$empty_num) = $this->buyFunc(24);
var_dump($drink_num);
var_dump($empty_num);
  • 输出结果如下: (代表可以喝到【13】瓶饮料,最后剩下【1】个空瓶)

int(13) int(1)

发散思维

其实,以我们的经验,是遇到过借空瓶换饮料,最后再还对方空瓶的答案

  • 比如,这个题目问的是,手里有24元,运行的答案为 int(15) int(3)
    那么,可能有的回答就是:“最后借对方一个空瓶,凑齐4个空瓶换一瓶饮料,喝完再还对方一个空瓶,那么最多可以喝到16瓶饮料”
  • 对于面试考察来说,也不失为一个可以展示自我思维活跃的一面,仅做参考 …

附录

  • 推荐阅读:想做出成绩,但是没资源怎么办?
  • JAVA参考:两元一瓶饮料,两个空瓶子换一瓶饮料,四个瓶盖换一瓶饮料…?

你可能感兴趣的:(算法,php)