zoukankan      html  css  js  c++  java
  • 【华为2019校园招聘】软件题 20200115

    第一题:

    题目:n阶台阶,每次只可以前进一步或者两步,中途有一次机会可以后退一步,这次机会也可以不使用,到达最后一个台阶一共有多少种走法

    解题思路:

    1. n个台阶问题,基本型就是斐波那契数列
    2. 原本是简单,加上可以后退或者不后退一步,难度提升为中等
    3. 先拆解为两步:
      1. 不后退,就是斐波那契数列
      2. 在第i步后退时,前面已经有f(i)种方法,后退之后的台阶数是n-(i-1),两者相乘
      3. 对每个有可能在i后退的结果相加,即是最后答案
        注意最后可能需要考虑到达n台阶时,能不能继续后退
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
        int n, ans;
        while (std::cin >> n) {
            vector<int> dp(n);
            dp[0] = 1;
            dp[1] = 2;
            
            for (int i = 2; i < n; i++) {
                dp[i] = dp[i-2] + dp[i-1];
            }
            
            int ans = dp[n-1];
            for (int i = 0; i < n; i++) {
                ans += (dp[i] * dp[n-i+1]);
            }
            std::cout << ans << std::endl;
        }
        return 0;
    }
    
  • 相关阅读:
    伪类和伪元素的区别
    inline-block 空隙
    递归模版,绑定树
    lessJs
    怎样开发单页面app
    控件的开发接口的设计原理
    加载器中的预编
    linux加固脚本
    ogg同步服务配置复制和同步进程的开始文件及RBA
    tidb4.0修改参数全过程
  • 原文地址:https://www.cnblogs.com/linweilin/p/12198866.html
Copyright © 2011-2022 走看看