前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >题目----汽水问题

题目----汽水问题

作者头像
Skrrapper
发布2024-06-18 15:25:16
250
发布2024-06-18 15:25:16
举报
文章被收录于专栏:技术分享技术分享

题目

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水?

解析

这个问题是一个典型的递归问题,可以通过计算购买和回收空瓶的过程来解决。让我们逐步分析:

初始购买: 你有20元,每瓶汽水1元,所以最开始你可以买20瓶汽水。

回收空瓶: 喝掉这20瓶汽水后,你有20个空瓶。每2个空瓶可以换一瓶汽水,所以你可以用这些空瓶换10瓶汽水。

继续回收: 喝掉这10瓶汽水后,你又有10个空瓶。同样的规则,你可以换5瓶汽水。

重复过程: 继续这个过程,你每次喝完汽水后回收空瓶以换取更多的汽水。

我们可以一直这样继续下去,直到没有足够的空瓶可以换取更多的汽水。每一步中,你获得的汽水数量等于你拥有的空瓶数量除以2(向下取整)。

现在,让我们来计算一下总共可以喝多少汽水。

给20元,你总共可以喝39瓶汽水。

这个结果是通过不断回收并利用空瓶来换取更多的汽水得出的。初始阶段,你直接购买20瓶汽水。随后,通过回收这些空瓶,你能够逐渐换取更多的汽水,直到没有足够的空瓶可以进行更多的交换为止。 ​

那么该题的算法逻辑梳理出来过后,我们将其写入代码中:

​代码跟写

代码语言:javascript
复制
/*
思路:
1. 20元首先可以喝20瓶,此时手中有20个空瓶子
2. 两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余:empty/2(两个空瓶子换的喝完后产生的瓶子) + empty%2(不够换的瓶子)
3. 如果瓶子个数超过1个,可以继续换,即重复2
*/
int main()
{
	int money = 0;
	int total = 0;
	int empty = 0;


	scanf("%d", &money);
	
	//方法1
	total = money;
	empty = money;
	while(empty>1)
	{
		total += empty/2;
		empty = empty/2+empty%2;
	}

    printf("total = %d\n", total);
	return 0;
}


// 方法二:按照上述喝水和用瓶子换的规则的话,可以发现,其实就是个等差数列:money*2-1
int main()
{
	int money = 0;
	int total = 0;
	int empty = 0;


	scanf("%d", &money);
	
	//方法2
	if(money <= 0)
	{
		total = 0;
	}
	else
	{
		total = money*2-1;
	}
	printf("total = %d\n", total);


	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 解析
  • ​代码跟写
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档