啤酒問題實現 | 2元錢1瓶 4個瓶蓋換1瓶2個空瓶換1瓶

1、第一種PHP實現
public function test()
{
    $money = input('money') ?? 10; //總價

    if ($money < 2) {
        echo 1;
        exit();
    }

    //計算第一次的
    $num = intval($money / 2); //總數量
    $capNum = $num; //瓶蓋數量
    $bottleNum = $num; //剩餘空瓶數量
    //開始兌換
    while ($capNum >= 4 || $bottleNum >= 2) {
        if ($capNum >= 4) {
            $newNum = intval($capNum / 4); //計算兌換多少瓶
            $capNum = $capNum % 4;//剩餘多少瓶蓋

            $num += $newNum; //總數量+
            $capNum += $newNum;//瓶蓋數量
            $bottleNum += $newNum; //空瓶數量+
        }

        if ($bottleNum >= 2) {
            $newNum = intval($bottleNum / 2); //計算兌換多少瓶;
            $bottleNum = $bottleNum % 2; //剩餘多少空瓶

            $num += $newNum; //總數量+
            $bottleNum += $newNum;//空瓶數量
            $capNum += $newNum; //瓶蓋數量
        }
    }

    echo $num;
}
2、第二種PHP實現
/**
 * 計算啤酒數量
 * @param money 金額
 * @param unitPrice 每瓶酒單價
 * @param capRule 瓶蓋兌換規則
 * @param bottelRule 瓶子規則兌換
 * @return
 */
public static int calculationBeerAmount(int money,int unitPrice,int capRule,int bottelRule){
    int beer = money / unitPrice;//初始的啤酒數
    int bottel = beer;//初始的瓶子數
    int cap = beer;//初始的瓶蓋數
    int temp;
    while (cap >= capRule || bottel >= bottelRule) {
        if ((temp = cap / capRule) > 0) {
            beer = beer + temp;
            cap = cap - capRule * temp + temp;
            bottel = bottel + temp;
        }
        if ((temp = bottel / bottelRule) > 0) {
            beer = beer + temp;
            cap = cap + temp;
            bottel = bottel - bottelRule * temp + temp;
        }
    }
    return beer;
}
3、JS實現
var flag = true;
var number = 5; //總數量
var emptyBottle = 5; //空瓶數量
var cap = 5; //瓶蓋數量
while (flag) {
    console.log("emptyBottle:" + emptyBottle, "cap:" + cap)
    if (emptyBottle < 2 && cap < 4) {
        flag = false;
    }
    if (emptyBottle >= 2) {
        number = number + parseInt(emptyBottle / 2);
        cap = cap + parseInt(emptyBottle / 2);
        emptyBottle = emptyBottle % 2 + parseInt(emptyBottle / 2);
    }
    if (cap >= 4) {
        number = number + parseInt(cap / 4);
        emptyBottle = emptyBottle + parseInt(cap / 4);
        cap = cap % 4 + parseInt(cap / 4);

    }
}
console.log(number)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章