【C 练习】喝汽水

一元钱可以买一瓶汽水,两个空瓶可以换一瓶汽水,求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 。

所以根据这个结论就可以写出更简单的代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值