2019年10月

《平凡的一天》里有句歌词:每天早上七点半就自然醒,听到的时候我就在想,怎么可能呢,七点半自然醒那得是老年人的作息吧。没想到国庆回家之后,我甚至还能 7 点自然醒,简直 book 11,最关键的是一整天也不觉得累。

假期一过,返沪上班,总觉得每天都很累。早上醒来累,上班路上累,工作的时候倒是不觉得,下班路上又开始累,回了家也累。
早上 8 点醒来累,9 点醒来也累,晚上早下班累,晚下班也累。不知道这是什么毛病。

也不知道是工作的原因还是自己的原因,反正就是 累 类 泪 lay。

难受

之前面试被问到的一个题目,想起来了就记录下

题目大概是这样:

商店规定 3 个空瓶可以换一瓶饮料,问买 10 瓶饮料可以喝到多少瓶?

提供两种解法

1. 循环

<?php

// 循环实现
function drink($full, $empty = 0) {
    // 3 个空瓶换一瓶饮料
    $exchange = 3;
    $drink = 0;
    while ($full > 0) {
        // 喝
        $drink += $full;    // 喝过的总数增加
        $empty = $empty + $full;    // 空瓶数增加

        // 换
        $full = intval($empty / $exchange);
        $empty = $empty % $exchange;
    }


    // 考虑特殊情况,剩余空瓶数 + 1 如果可以兑换一瓶的话,就还可以跟老板预支一瓶,喝完再把空瓶给他
    if ($empty + 1 == $exchange) {
        $drink++;
    }

    return $drink;
}

var_dump(drink(10));

2. 递归

<?php

// 递归实现
function drink_recursive($full, $empty = 0, $drink = 0) {
    // 3 个空瓶换一瓶饮料
    $exchange = 3;

    // 终止条件 - 没有满瓶 && 空瓶不够兑换
    if ($full < 1 && $empty < $exchange) {
        // 考虑特殊情况,剩余空瓶数 + 1 如果可以兑换一瓶的话,就还可以跟老板预支一瓶,喝完再把空瓶给他
        if ($empty + 1 == $exchange) {
            $drink++;
        }
        return $drink;
    }

    // 空瓶兑换
    if ($empty > 0) {
        $full += intval($empty / $exchange);
        $empty = $empty % $exchange;
    }

    // 喝
    if ($full > 0) {
        $drink += $full;
        $empty += $full;
        $full = 0;
    }

    return drink_recursive($full, $empty, $drink);
}

var_dump(drink_recursive(10));