开朗的网友112233 2024-04-27 20:28 采纳率: 55.6%
浏览 1
已结题

【提高】蜜蜂路线c++

描述

一只蜜蜂在下图所示的数字蜂房上爬动 , 已知它只能从标号小的蜂房爬到标号大的相邻蜂房 , 现在问你:蜜蜂从蜂房 1开始爬到蜂房 N , 1=<N <=100,有多少种爬行路线?

img

输入描述

输入 N 的值。( 1=<n<=100 )

输出描述

爬行有多少种路线。

用例输入 1

13
用例输出 1

233
来源

递归

  • 写回答

3条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-27 20:28
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    题目描述:

    有一只蜜蜂在数字蜂房上爬行,已知它只能从标号小的蜂房爬到标号大的相邻蜂房。现在问有多少种爬行路线,蜜蜂从蜂房 1 开始爬到蜂房 N,1 <= N <= 100。

    输入描述:

    输入 N 的值。

    输出描述:

    输出爬行有多少种路线。

    解决方案:

    思路:

    这个问题本质是一个斐波那契数列问题,即第n个蜂房与第n-1个蜂房和第n-2个蜂房有关。

    因此,我们可以用递推的方式求解,也可以用递归的方式求解。

    • 递推方式:使用一个数组记住每个蜂房的路径数,然后递推计算当前蜂房的路径数。
    • 递归方式:使用递归函数计算当前蜂房的路径数。

    代码实现:

    • 递推方式:
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
        int n;
        cin >> n;
    
        vector<int> dp(n + 1, 0);
        dp[1] = 1;
    
        for(int i = 2; i <= n; ++i){
            dp[i] = dp[i-1] + dp[i-2];
        }
    
        cout << dp[n] << endl;
    
        return 0;
    }
    
    • 递归方式:
    #include <iostream>
    
    using namespace std;
    
    int bee_route(int n)
    {
        if(n == 1 || n == 2)
            return 1;
    
        return bee_route(n - 1) + bee_route(n - 2);
    }
    
    int main()
    {
        int n;
        cin >> n;
    
        cout << bee_route(n) << endl;
    
        return 0;
    }
    

    时间复杂度:

    • 递推方式:O(n)
    • 递归方式:O(2^n)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月5日
  • 已采纳回答 4月27日
  • 创建了问题 4月27日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集