跳臺階

鏈接:https://www.nowcoder.com/acm/contest/90/A
來源:牛客網

題目描述

小明在坐景馳科技研發的無人車到達了目的地。
景馳科技(JingChi.ai)是一家由人工智能技術驅動、以無人駕駛技術爲核心的智能出行公司。它將打造面向中國市場的全無人駕駛。
從無人車下來以後,小明看到了一個長長的樓梯。
有一個n級臺階的樓梯,小明一次可以向上跳1步,兩步,甚至是n步,請問小明跳到n級臺階有多少種跳法?

輸入描述:

第一行輸入一個整數t,代表有t組樣例:( T<=30)
接下來的t行,都用一個整數n,表示樓梯有n級臺階( 1<=n<=30)

輸出描述:

輸出跳到第n級臺階有多少種跳法

輸入

1
1

輸出

1
開始我是這麼做的
#include <bits/stdc++.h>
using namespace std;
int dp[100][100];
int main()
{
   int T,n;
   cin>>T;
   while(T--)
   {
       memset(dp,0,sizeof(dp));
       cin>>n;
       dp[0][0]=1;
       for(int i=1;i<=n;i++)
       {dp[i][1]=1;
           for(int j=2;j<=i;j++)
            {
                for(int k=i-j;k<i;k++)
                {
                 if(k>j-1)
                 dp[i][j]=dp[k][j-1]+dp[i][j];
                 else
                   dp[i][j]=dp[k][k]+dp[i][j];
                }
            }
       }
       cout<<dp[n][n]<<endl;
   }
}


後來找到規律
#include <bits/stdc++.h>
using namespace std;
int mi(int a,int b)
{
    int ans=1;
    for(int i=0;i<b;i++)
    {
        ans=ans*a;
    }
    return ans;
}
int main()
{
   int T,n;
   cin>>T;
   while(T--)
   {
       cin>>n;
       cout<<mi(2,n-1)<<endl;
   }
   return 0;
}

再後來發現可以把第一種解法化簡
#include <bits/stdc++.h>
using namespace std;
int p[100];
int main()
{
   int T,n;
   cin>>T;
   while(T--)
   {
       memset(p,0,sizeof(p));
       cin>>n;
       p[0]=1;
       for(int i=1;i<=n;i++)
       {
           for(int j=0;j<i;j++)
           {
               p[i]=p[i]+p[j];
           }
       }
       cout<<p[n]<<endl;
   }
   return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章