买酒兑换问题
作者:互联网
题目:
小明去超市买5瓶啤酒,喝完后,一个瓶子可以分成一个瓶盖和瓶子,四个瓶盖可以换一瓶新酒,两个瓶子可以换一瓶新酒,那么小明买5瓶酒最后一共可以喝多少瓶啤酒?
答案
/**
* 问题描述:小明去超市买5瓶啤酒,喝完后,一个瓶子可以分成一个瓶盖和瓶子,
* 四个瓶盖可以换一瓶新酒,两个瓶子可以换一瓶新酒,那么小明买5瓶酒最后一共可以喝多少瓶啤酒?
*/
/**
* 计算能喝的啤酒总瓶数
* @param {*} buyBeerCount 购买的啤酒数量
*/
var calcTotalDrinkBeerCount = function (buyBeerCount) {
/** 记录喝过的总啤酒数 */
var totalBeerCount = 0;
/** 盖子兑换率,4个盖子换一瓶酒 */
var capRate = 4;
/** 瓶子兑换率,2个瓶子换一瓶酒 */
var bottleRate = 2;
/**
* 根据现有啤酒数量,现有瓶盖数量,现有瓶子数量计算可以兑换的新的啤酒数
* @param {*} beerCount 现有啤酒数量
* @param {*} capCount 现有瓶盖数量
* @param {*} bottleCount 现有瓶子数量
* @returns
*/
var calcExchangeBeer = function (beerCount, capCount, bottleCount) {
/**
* 退出递归条件:
* 1. 啤酒数量为 0
* 2. 瓶盖数量不够兑换啤酒
* 3. 瓶子数量不够兑换啤酒
*/
if (beerCount === 0 && capCount < capRate && bottleCount < bottleRate) {
console.log("不够兑换,计算结束");
return;
}
// 如果有整瓶啤酒,则把整瓶啤酒转换为瓶子和啤酒盖,并记录到喝过的总数
if (beerCount > 0) {
// 记录总数
totalBeerCount += beerCount;
capCount += beerCount;
bottleCount += beerCount;
// 啤酒喝了,清空
beerCount = 0;
}
console.log("把【啤酒】转换为【瓶子】和【啤酒盖】:");
console.log(
"已喝啤酒数:" +
totalBeerCount +
",啤酒数:" +
beerCount +
",盖子数:" +
capCount +
",空瓶子数:" +
bottleCount
);
// 把能转换的盖子转换为啤酒
if (capCount >= capRate) {
beerCount += Math.floor(capCount / capRate);
// 剩余瓶盖数
capCount = capCount % capRate;
}
// 把能转换的瓶子转换为啤酒
if (bottleCount >= bottleRate) {
beerCount += Math.floor(bottleCount / bottleRate);
bottleCount = bottleCount % bottleRate;
}
console.log("把【瓶子】和【啤酒盖】转换为【啤酒】:");
console.log(
"已喝啤酒数:" +
totalBeerCount +
",啤酒数:" +
beerCount +
",盖子数:" +
capCount +
",空瓶子数:" +
bottleCount
);
calcExchangeBeer(beerCount, capCount, bottleCount);
};
console.log("初始值:");
console.log("啤酒数:" + buyBeerCount + ",盖子数:" + 0 + ",空瓶子数:" + 0);
calcExchangeBeer(buyBeerCount, 0, 0);
console.log("总共可以喝【" + totalBeerCount + "】瓶啤酒");
};
calcTotalDrinkBeerCount(5);
标签:买酒,瓶子,log,beerCount,问题,兑换,capCount,啤酒,bottleCount 来源: https://www.cnblogs.com/DHclly/p/15806861.html