由题可知,本题关键在于空瓶子可以换汽水,那么换了汽水以后又会有新的空瓶子,用这些空瓶子还可以再次换到汽水,依次往复,当瓶子数为奇数时,空瓶子可以存储起来,当空瓶子数量为1时再加入循环,类推得到结果。
int x = 20; //设置瓶子总数
int n = 0; //n为饮料总量
int d = 0; //d为多余的瓶子
while (x > 1) //空瓶子个数为1时循环结束
{
n += x; //把x的饮料拿走给n
if (x % 2) //若此时空瓶子个数为奇数则d++
d++;
x /= 2; //空瓶子换饮料
if (x == 1) //当x == 1时 加上d中存放的空瓶子个数
{
x += d;
d = 0;
}
}
printf("%d\n", n);