题目
代码
int main()
{
int money = 0;
int total = 0;
int empty = 0;
scanf("%d", &money);
total = money;
empty = money;
while(empty>1)
{
total += empty/2;
empty = empty/2+empty%2;
}
printf("total = %d\n", total);
return 0;
}
讲解
❤️定义变量并初始化【money是给的钱,total是最终喝的汽水数,empty是空瓶子数】。
❤️一开始有多少钱就买了几瓶汽水,喝掉后就都是空瓶子了,即total = money; empty = money;
。
❤️关于空瓶子可以分两种情况:
- 空瓶子数可以被2整除,可以直接换汽水,这些汽水喝完后剩下的空瓶子还能再换汽水,因此需要循环。total可以增加,即
total += empty/2;
。 - 空瓶子数不可以被2整除,这个情况还可以细分为两种情况。 一种
empty/2
是够两个,可以换汽水,但会有剩下的空瓶子,剩下的空瓶子可以 和 新换的汽水喝完后的空瓶子加起来 再拿去换; 另一种empty%2
是不够两个,换不了汽水。这两种小情况可以合并为empty = empty/2+empty%2;
。【/
是抹掉小数;%
是只留小数,即取余】
❤️关于循环条件while(empty>1)
。给的钱是一次就确定的,用空瓶子换汽水才是可以进入循环的。
- 【空瓶子数刚好可以被2整除】如果有4个空瓶子,那么
empty = empty/2+empty%2 = 4/2 + 4%2 = 2 + 0 = 2
,可以换2瓶汽水,没有剩下的空瓶子。 - 【空瓶子数不能被2整除,但够,有剩下的空瓶子】如果有5个空瓶子,那么可以换
5/2 = 2
瓶汽水。empty = empty/2+empty%2 = 5/2 + 5%2 = 2 + 1 = 3
,其中的2是新换的汽水喝完后剩下的瓶子,1是最开始不能被2整除剩下的瓶子。 - 【不够两个】,进不了循环。
❤️打印结果。
运行结果
加油🎉
我们不得不饮食、睡眠、游玩、恋爱,也就是说,我们不得不接触生活中最甜蜜的事情,不过我们必须不屈服于这些事物。
你又向你的目标迈进了哦!
❤️❤️❤️ 恭喜! 恭喜! 又收了一名小弟! ❤️❤️❤️