zoukankan      html  css  js  c++  java
  • P5743 小猴吃桃 题解

    题目传递门

    解题思路:

    这道题大神们都不屑一顾,我却认为这是一道非常好的试题,可以让孩子们锻炼的东西太多了,太有用了。我试着推导一下,给不清楚的同学解惑。

    1、假设第(10)天吃完(就是一个猜想的数字,和答案无关,也可以设成第(i)天吃完,太小孩子不好理解),就是第(10)天早上有(1)个桃子,设(s_{10}=1)
    2、第(9)天早上还未开始吃之前的数量,即(s_9),我们想找出 (s_9)(s_{10})之间的关联关系,找到递推公式,就可以实现递推了。
    3、第(9)天,吃了多少个桃子呢?是当天的一半加1个,就是 吃掉桃子数=(frac{s_9}{2}+1),那么当天吃完剩下的桃子数=(s_9-(frac{s_9}{2}+1))
    4、而第(9)吃完剩下的,恰好就是第十天的开始数量,即(s_{10}=s_9-(frac{s_9}{2}+1))
    5、去括号: (s_{10}=s_9-frac{s_9}{2}-1=frac{s_9}{2}-1)
    6、等式两边都乘以(2), (2*s_{10}=2*frac{s_9}{2}-1*2)
    7、整理得到:(2*s_{10}=s_9-2),移项
    8、(s_9=s*s_{10}+2)
    9、如果是其它天数,比如(i),可以整理出通项公式:(s_i=2*s_{i+1}+2)

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    int n;
    
    
    /**
     思路分析:
     1、比如第10天桃子数量为1,我们记为s10=1.
     2、那么我们可以考虑s9是多少?
     3、第9天时,吃掉了s9的一半,再加1个,然后变成的s10.就是 吃掉了:s9/2+1,剩下: s9-s9/2-1=s9/2-1=s10
     4、整理得到s9=2s10+2
     5、通项公式为 Si=2*S(i+1)+2
     6、还知道Sn=1
     */
    
    /**
     * 递归函数的定义及参数理解是最重要的!
     * @param n 第几天
     * @return  x天剩余多少桃子
     */
    int dfs(int x) {
        if (x == n) return 1;
        return 2 * dfs(x + 1) + 2;
    }
    
    int main() {
        cin >> n;
        //方法1:逆推
        LL ans = 1; //最后一天剩下一个
        for (int i = n - 1; i >= 1; i--) ans = ans * 2 + 2;
        cout << ans << endl;
    
        //方法2:递归法 顺推
        cout << dfs(1) << endl;
        return 0;
    }
    
  • 相关阅读:
    7. Bagging & Random Forest
    VS 多工程代码编写
    C++(vs)多线程调试 (转)
    halcon发布
    windows 批处理文件调用exe
    Halcon编程-基于形状特征的模板匹配
    缺陷检测 深度学习
    PID控制
    去掉图片中的红色标记的方法?
    图像处理之图像拼接四
  • 原文地址:https://www.cnblogs.com/littlehb/p/14979821.html
Copyright © 2011-2022 走看看