题目描述

假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。
每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢?
注意:给定 n 是一个正整数。

输入描述

格子数n

输出描述

跳完n个格子到达终点的方法

示例1
输入

2

输出

2

到达一个格子的方法有两种,一种是一个格子前,另一种是两个格子前,所以可以建立状态转移方程
,,即可得到结果

#include<iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int dp[1000];
    dp[1]=1;dp[2]=2;
    for(int i = 3 ; i <= n; i++)
    {
        dp[i]=dp[i-1]+dp[i-2];
    }
    cout<<dp[n]<<endl;
    return 0;
}

也可以不用开辟数组来存放,因为只有邻近的两个状态是有效的,所以只需要递推一遍就好,

#include<iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int ans = 1;//表示当前格子的答案
    int a,b;//表示2个格子前,b表示一个格子前
    a = 1;b = 1;
    for(int i = 2 ; i <= n ; i++)
    {
        int temp = ans;
        ans = a+b;
        a = b;
        b = ans;
    }
    cout<<ans<<endl;
    return 0;
}