C1-Zexal的过河

题目描述

Zexal打算借助河中间的石砖过到河对岸去Zexal第一块石砖出发,接下来他可以走到第二块石砖或第三块石砖,有时候走的很不爽,甚至可以直接跨过两个石砖,到达第四块石砖,但是不能连续两次这种操作,因为这样消耗体能比较大。现在假设河中含nn块石砖,且这些石砖呈直线分布,请你计算出Zexal从第一块石砖出发有多少种安全的过河方法。

输入

输入将由多组测试数据组成,以EOF结尾。

每组数据只有一行,为河中的总石砖数n0n50

输出

对于每组数据,输出一行,为过河的方法数。

输入样例

1
2
3

输出样例

1
2
4

样例解释

1:一步走完;
2:先走到2再走完,或者直接走完;
3:111或12或21或3。

容易想出来的代码

#include <iostream>
#include <stdio.h>
using namespace std;
long long n,a[51][2];
int main()
{
    a[1][0] = 1;
    a[2][0] = 2;
    a[3][0] = 3;
    a[1][1] = 0;
    a[2][1] = 0;
    a[3][1] = 1;
    for(int i = 4; i <= 50; i++)
    {
        a[i][0] = a[i-1][0] + a[i-2][0] + a[i-1][1] + a[i-2][1];
        a[i][1] = a[i-3][0];
    }
    while(~scanf("%d",&n))
    {
        printf("%lld
",a[n][0] + a[n][1]);
    }
    return 0;
}

不那么容易想的代码

#include <iostream>
#include <stdio.h>
using namespace std;
long long n,a[51];
int main()
{
    a[1]= 1;
    a[2]= 2;
    a[3]= 4;
    a[4] = 7;
    a[5] = 13;
    for(int i = 6; i <= 50; i++)
    {
        a[i] = a[i-1] + a[i-2] + a[i-4] + a[i-5];
    }
    while(~scanf("%d",&n))
    {
        printf("%lld
",a[n]);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/kubab119/p/11823330.html