NYOJ 76 超级台阶

还是大数问题

能够參考下

一道腾讯校招试题

NYOJ 103 A+B Problem II

NYOJ 28 大数阶乘


时间限制:1000 ms  |  内存限制:65535 KB

难度:3

  • 描写叙述

  • 有一楼梯共m级,刚開始时你在第一级。若每次仅仅能跨上一级或二级,要走上第m级,共同拥有多少走法?

    注:规定从一级到一级有0种走法。

    • 输入

    • 输入数据首先包括一个整数n(1<=n<=100),表示測试实例的个数,然后是n行数据,每行包括一个整数m,(1<=m<=40), 表示楼梯的级数。

    • 输出

    • 对于每一个測试实例。请输出不同走法的数量。

    • 例子输入

    • 2
      2
      3
    • 例子输出

    • 1
      2


#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
    int ans[50][20];
    int n,m,i,j,k,t;
    memset(ans,0,sizeof(ans));
    ans[2][0]=1;
    ans[3][0]=2;
    cin>>n;
    while(n--)
    {
        cin>>m;
 
        if(m<=3)
            cout<<m-1<<endl;
        else 
        {
            for(i=4;i<=m;i++)
            {
                for(j=0,k=0;j<20;j++)
                {
                    ans[i][j]=(ans[i-1][j]+ans[i-2][j]+k)%10;
                    k=(ans[i-1][j]+ans[i-2][j]+k)/10;
                }
            }
            t=19;
            while(0==ans[m][t])
                t--;
            while(t>=0)
                cout<<ans[m][t--];
            cout<<endl;
        }
    }
    return 0;
}


你可能感兴趣的:(NYOJ 76 超级台阶)