编程之美---京东2016编程题

题目

有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。

给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。

测试样例: 输入:3 返回:2

  1. #include <iostream>  
  2. #include <cstdio>  
  3.   
  4. using namespace std;  
  5.   
  6. const int maxn = 41;  
  7. int dp[maxn];  
  8.   
  9. void prepare(){  
  10.     if(n==0)
                return 0;
            if(n==1||n==2)
                return 1;
            if(n==3)
                return 2;
            int *s = new int[101];
             s[0]=0;
             s[1]=0;
             s[2]=1;
             s[3]=2;
             for(int i=4;i<=n;i++)
             {
             s[i]=(s[i-2]+s[i-1])%1000000007;
             }
             return s[n];
  11.    
  12.         /** 
  13.          * 逆向思考。要想走到M级,可以分为2种情况。 
  14.          * 1)从m-2级迈两步 
  15.          * 2)从m-1级迈一步 
  16.          */  
  17.     
  18. }  
  19.   
  20. int main(){  
  21.     prepare();  
  22.   
  23.     int t;  
  24.     scanf(“%d”,&t);  
  25.     while(t–){  
  26.         int n;  
  27.         scanf(“%d”,&n);  
  28.         printf(“%d\n”,dp[n-1]);  
  29.     }  
  30.   
  31.     return 0;  
  32. }  
    原文作者:Dean0Winchester
    原文地址: https://blog.csdn.net/qq_38906523/article/details/79867168
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞