参考
https://zhidao.baidu.com/question/434231281731283604.html
原回答漏算了新瓶盖数和新空瓶数,经过修改后算法如下:
/**
* 啤酒2元1瓶,4个瓶盖可换一瓶,2个空瓶可换一瓶,问10元可喝多少瓶
*
* @param money 钱数
* @return 总共可喝到的瓶数
*/
public static int calc(int money) {
// sum 总瓶数;cap 瓶盖数;bottle 空瓶数
int sum, cap, bottle;
sum = cap = bottle = money / 2;
while (cap >= 4 || bottle >= 2) {
// 瓶盖兑换
sum += cap / 4;
// 空瓶兑换
sum += bottle / 2;
// 瓶盖和空瓶共兑换到的啤酒数(同时等于新瓶盖数和新空瓶数)
int rep = cap / 4 + bottle / 2;
// 新瓶盖数+旧瓶盖数
cap = rep + cap % 4;
// 新空瓶数+旧空瓶数
bottle = rep + bottle % 2;
}
return sum;
}