题目描述
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输入
N
输出
桃子总数
样例输入
10
样例输出
1534
解题思路
我们首先要确定了计算方法以及控制变量
1.每天吃一半多一个,到最后剩一个。
- 所以我们计数变量count 开始应该初始化为1;
- 吃桃速度通过计算可以获得出来是count = (count + 1) * 2
2.因为猴子到第N 天的时候,只剩下一个桃子了。
- 所以它实际吃桃子的天数其实是N - 1天
在确定了计算方法以及控制变量,就可以选择使用哪种方法来完成操作了
下面提供了两种方法,递归和for() 循环
方法一:递归
#include <stdio.h>
int funcion(int N, int count); //自定义函数来完成这个操作
int main(void){
int N, count = 1; //将计数变量count 定义成main()的局部变量
scanf("%d", &N); //接收用户输入的天数
printf("%d", funcion(N, count)); //传入天数N 和计数变量count 给函数操作
return 0;
}
int funcion(int N, int count){
/*
* 假设第N 天只剩下一个桃子的话,其实猴子只吃了N - 1天。
*/
if(N == 1) return count;
count = (count + 1) * 2; //逆推猴子吃桃的规律
funcion(--N, count); //N-- 会陷入死循环,需提前将天数减小
//--N == N - 1;
}
或者我们可以换一种简单的方法,直接通过for() 循环来完成该操作
方法二:for()循环
#include <stdio.h>
int main(void){
int N, count = 1; //将计数变量count 定义成main()的局部变量
scanf("%d", &N); //接收用户输入的天数
for(int i = 1; i < N; i++){ //从第一天开始,到第N - 1天结束
count = (count + 1) * 2; //逆推猴子吃桃的规律
}
printf("%d", count); //输入桃子的数量
return 0;
}
这里插一句话,本月会更新十五篇文章,也算是给自己的一些压力。
当然,我也是新手。如果大家觉得我的文章有可以改进的地方,欢迎大家留评论来告诉我呀!
本月更新进度 1/15
创作不易,你的点赞是我最大的动力!!!
我们下次再见 end~