一元钱可以买一瓶汽水,两个空瓶可以换一瓶汽水,求n元钱可以和多少瓶汽水。
循环:
#include<stdio.h>
int main()
{
int money = 0;//钱
int total = 0;//汽水
int empty = 0;//空瓶
scanf("%d", &money);
total = money;//有多少钱就有多少瓶汽水
empty = money;//有多少瓶汽水就有多少空瓶
while (empty>=2)//当空瓶小于2个说明不能换了,就不进入循环
{
total += empty / 2;//汽水总数为空瓶除2
empty = (empty / 2) + (empty % 2);
//(empty / 2):兑换完汽水后汽水的数量 (empty % 2):空瓶换完汽水后可能会剩一个
}
printf("%d", total);
return 0;
}
递归:
#include<stdio.h>
int drink_total(int empty)
{
if (empty >=2)//如果空瓶大于等于2个说明可以兑换
return empty / 2 + drink_total(empty / 2 + empty % 2);
//返回兑换的之后的汽水数量,再将剩余空瓶传入函数继续兑换
else//如果空瓶不大于等于2说明兑换不了,直接返回0
return 0;
}
int main()
{
int money = 0;
int total = 0;
int empty = 0;
scanf("%d", &money);
total = money;
empty = total;
printf("%d",total+drink_total(empty));//先将汽水的数量存好,再将空瓶传入函数进行兑换
return 0;
}
最后我们可以发现规律:可以兑换的汽水总数 = 钱*2 - 1 。
所以根据这个结论就可以写出更简单的代码。