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)