喝汽水问题
例如:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)
代码中:total表示汽水的瓶数,empty表示空瓶数,money表示所拥有的钱。
1.方法一直接分析
假设总共有X元
那么第一次就能买X瓶水
汽水:total= X
空瓶:empty= X
然后就空出X个瓶子,
(如果空出来的瓶子大于1)空出瓶子的一半能再去换水
汽水:total=empty/2+total
空瓶:empty=empty/2+empty%2
(此时的空瓶为第二次换的汽水,每一个汽水就有一个空瓶,加上没换掉的瓶子)
eg:money=5为例
方法一代码:
#include <stdio.h>
int main()
{
int money = 0;
scanf("%d", &money);
int total = money;
int empty = money;
while (empty > 1)
{
total = empty / 2 + total;
empty = empty / 2 + empty % 2;
}
printf("%d", total);
return 0;
}
2.方法二分奇偶,分类讨论
①假设有有X元(X为偶数)
第一次花X元,买X瓶,第二次就花X的空瓶,买X/2瓶,第三次就花X/2的空瓶,买X/4瓶,一直到第n次,X/n为1的时候停止,
此时总瓶数为total=X + X/2 + X/4 +…+1
有等比数列求和可知:
total=2X-1,并且还留下了一个空瓶
②假设有Ⅹ元 (X为奇数)
可转化为((X-1)+1)元
此时X-1为偶数,代入上面偶数的式子有
total1=2X-3
此时还留下一个空瓶子加一块钱,显然还能喝2瓶:
total2 = 2;
此时能喝的总数为:
total=total1 + total2 = 2X-1;
③综上所述
钱能喝的汽水的关系为:
total = 2X-1
方法二代码:
#include <stdio.h>
int main()
{
int money = 0;
int total = 0;
scanf("%d", &money);
total = 2 * money - 1;
printf("%d", total);
return 0;
}