首页 > 其他 > 详细

C1-Zexal的过河

时间:2019-11-08 21:55:59      阅读:81      评论:0      收藏:0      [点我收藏+]

题目描述

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\n",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\n",a[n]);
    }
    return 0;
}

 

C1-Zexal的过河

原文:https://www.cnblogs.com/kubab119/p/11823330.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!