【题解】猴子吃桃

题目描述
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第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~

猜你喜欢

转载自blog.csdn.net/weixin_43776724/article/details/106727214