题目:假设你手里有 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);
int(13) int(1)
发散思维
其实,以我们的经验,是遇到过借空瓶换饮料,最后再还对方空瓶的答案
24
元,运行的答案为 int(15) int(3)
那么,可能有的回答就是:“最后借对方一个空瓶,凑齐4个空瓶换一瓶饮料,喝完再还对方一个空瓶,那么最多可以喝到16瓶饮料”