豆包MarsCode代码练习

豆包MarsCode代码练习网站:猴子吃桃问题求第一天摘桃数量 - MarsCodeicon-default.png?t=O83Ahttps://www.marscode.cn/practice/656y16e6wwjdvy

在体验豆包MarsCode代码练习时,我首先被这个猴子吃桃的问题所吸引。这个问题是一个经典的递推问题,需要我们逆向思考,从最后一天开始推算到第一天。

在编写代码之前,我仔细分析了问题。根据题目描述,猴子每天都会吃掉前一天剩下桃子的一半再加一个。这意味着如果我们知道了某一天的桃子数量,我们就可以推算出前一天的桃子数量。具体来说,如果第 \( n \) 天剩下 \( x \) 个桃子,那么第 \( n-1 \) 天剩下的桃子数量应该是 \( (x + 1) \times 2 \)。

我选择了一个简单的循环结构来解决这个问题。在循环中,我使用一个变量来存储当前天的桃子数量,并且每次循环都会更新这个变量,以表示前一天的桃子数量。循环从第 10 天开始,直到第 1 天。

代码实现上,我使用了 C 语言的基本语法,包括循环控制和算术运算。在代码中,我定义了两个整数变量 `prev` 和 `cur`,分别用来存储前一天和当前天的桃子数量。我将 `cur` 初始化为第 10 天剩下的桃子数量,即 1。然后,我使用一个从 9 到 1 的循环来逆向计算每一天的桃子数量。

在每次循环中,我使用公式 `prev = (cur + 1) * 2` 来更新 `prev`,然后将 `cur` 更新为 `prev` 的值,以便下一次循环使用。当循环结束时,`cur` 将包含第 1 天的桃子数量。

最后,我使用 `printf` 函数输出了第 1 天的桃子数量。

通过这次练习,我不仅复习了 C 语言的基础知识,还锻炼了我的逻辑思维和问题解决能力。这种逆向思维的方式对于解决递推问题非常有帮助,也让我意识到在编程中,理解问题的本质和逻辑关系是至关重要的。

总的来说,这次代码练习是一次非常有趣且富有教育意义的经历。它不仅提升了我的编程技能,也让我对算法和逻辑推理有了更深的理解。我期待在未来的练习中继续挑战自己,提高我的编程水平。
 

完整代码:

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

int main() {
    //  8.猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。)
	// 分析:后一天 = ( 前一天 / 2 ) -1  --> 前一天 = ( 后一天 + 1 ) * 2
	int day = 9;
	int prev , cur = 1;
	while( day > 0)
	{
		prev = ( cur + 1 ) * 2;
		cur = prev;	
		day--;
	}
	printf("第1天共摘%d个桃子",cur);
}

数学分析:

我们可以从第 10 天开始反推,逐步计算出第 1 天猴子摘下的桃子数量。

  1. 第 10 天:剩下 1 个桃子。
  2. 第 9 天:猴子吃掉了一半加一个,所以前一天剩下的桃子数量为 (1+1)×2=4(1+1)×2=4 个桃子。
  3. 第 8 天:同理,前一天剩下的桃子数量为 (4+1)×2=10(4+1)×2=10 个桃子。
  4. 第 7 天:前一天剩下的桃子数量为 (10+1)×2=22(10+1)×2=22 个桃子。
  5. 第 6 天:前一天剩下的桃子数量为 (22+1)×2=46(22+1)×2=46 个桃子。
  6. 第 5 天:前一天剩下的桃子数量为 (46+1)×2=94(46+1)×2=94 个桃子。
  7. 第 4 天:前一天剩下的桃子数量为 (94+1)×2=190(94+1)×2=190 个桃子。
  8. 第 3 天:前一天剩下的桃子数量为 (190+1)×2=382(190+1)×2=382 个桃子。
  9. 第 2 天:前一天剩下的桃子数量为 (382+1)×2=766(382+1)×2=766 个桃子。
  10. 第 1 天:前一天剩下的桃子数量为 (766+1)×2=1534(766+1)×2=1534 个桃子。

因此,猴子在第 1 天共摘下 1534 个桃子。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LucianaiB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值