【小杨带你刷好题】C语言篇~day2

在这里插入图片描述

文章目录

每篇前言

1.导语
2.习题:猴子吃桃

      1.经典解法
      2.进阶解法

3.结语

每篇前言

✅作者简介:大家好,我是小杨
📃个人主页:「小杨」的csdn博客
🔥系列专栏:小杨带你玩转C语言【初阶】
🐳希望大家多多支持🥰一起进步呀!

在这里插入图片描述


导语

   本篇博客主要向各位小伙伴们讲解C语言的经典例题,带领各位小伙伴们一起刷C语言,希望各位小伙伴们能够在这里收获多多!让我们一起努力!一起进步!希望大家能够通过阅读这篇博客,受益良多!


在这里插入图片描述

习题:猴子吃桃

习题描述:

猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?

1.经典解法

习题分析:

根据题目要求找出前一天剩余桃子数和后一天剩余桃子数之间的关系,再依据两者之间的关系选择方法进行解题。
该题所表达的关系为:前一天剩余桃子数=(后一天剩余桃子数 + 1)2,该题方法选择为:for循环,逆推法

习题代码如下:

#include<stdio.h>
int main()
{   //采用逆向思维解题
	int n = 1;	//定义后一天的桃子数为1
	int m = 0;  //初始化前一天的桃子数为0
	int i = 0;  //初始化天数为第0天
	for (i = 9; i>0; i--)
	{
		m = (n + 1) * 2;
		n = m;
	}
	printf("第一天共摘了%d个桃子",m);
	return 0;
}

代码输出结果:

在这里插入图片描述


有些小伙伴可能想求出每天前所剩余的桃子数,为了满足小伙伴们的要求,可将代码修改如下:

#include<stdio.h>
int main()
{   //采用逆向思维解题
	int n = 1;	//定义后一天的桃子数为1
	int m = 0;  //初始化前一天的桃子数为0
	int i = 0;  //初始化天数为第0天
	for (i = 9; i > 0; i--)
	{
		m = (n + 1) * 2;
		n = m;
		printf("第%d天前剩余了%d个桃子\n",i,m);
	}
	return 0;
}

代码输出结果:
在这里插入图片描述


由此返回目录

2.进阶解法

小伙伴们,你们知道吗?这个问题还可以使用进阶方法(即函数递归)进行解决,该方法代码如下:

习题代码如下:

#include<stdio.h>

int Func(int n)//功能:函数返回第n天前剩余的桃子数
{
	if (n == 10)//功能:终止条件
		return 1;
	else 
		return (Func(n+1) + 1) * 2;//运用递归思想
	}

int main()//主函数
{
	printf("第一天共摘了%d个桃子", Func(1));
	return 0;
}

代码输出结果:

在这里插入图片描述


为了小伙伴们能够更好地理解函数递归这种方法,特意为小伙伴们梳理了函数递归的执行过程思路:

在这里插入图片描述

注意:如果有小伙伴们想求其它天数前的桃子数,只需要将n值换成你想要的天数即可!


由此返回目录

结语

各位小伙伴们,今天的试题讲解就先到了这里!

小伙伴们,切记!这些示例代码一定要记得自己实际操作一下,这样才能加深对这些知识的理解!

最后,感谢每一位小伙伴的阅读,让我们一起努力,一起加油,一起进步!
在这里插入图片描述


  • 51
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 48
    评论
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小杨MiManchi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值