问题描述
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。
常规解法
#include<stdio.h>
int Drink(int money)
{
int total = money;//开始买的饮料
int empty = money;//开始产生的空瓶
while (empty>1)
{
total = total + empty / 2;//总=已经喝过的饮料+换的饮料
empty = empty / 2 + empty % 2;//剩余的空瓶数量=换的饮料+剩下一个空瓶
//饮料总数叠加,空瓶数量逐渐减少
}
return total;
}
int main()
{
int money = 20;
printf("%d",Drink(money));
return 0;
}
代码简化
找到规律:total=money*2-1
#include<stdio.h>
int Drink(int money)
{
int total = money * 2 - 1;
return total;
}
int main()
{
int money = 20;
printf("%d", Drink(money));
return 0;
}
递归做法
以空瓶的角度
#include<stdio.h>
int Drink(int empty)
{
if (empty > 1)
{
int i = empty / 2;//剩余空瓶可以换的饮料
int j = empty % 2;//不可换饮料的空瓶(一瓶)
return i+Drink(i + j);
}
else
return 0;
}
int main()
{
int money = 20;
printf("%d", Drink(money)+money);//要加上原来可以买的饮料
return 0;
}