php 两元钱一瓶酒,啤酒问题实现 | 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值