zoukankan      html  css  js  c++  java
  • 超级台阶(nyoj 76)

    本题输出数据是有规律的,其实就是斐波那契数列的变形,但是可以换一种思路,采用递归思想来解决这个问题,不过实践证明递归效率不高,会超时,但是这并不影响对递归的学习。

    一. 采用递归思想,会超时

    思路:和用递归求组合数类似,设置递归出口,每次递归都解决一步,然后交给下一次递归,直至到达出口。

    代码如下:

    #include<stdio.h>
    int fun(int m);
    int main(void)
    {
        int n,m;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&m);        
            printf("%d
    ",fun(m));
        }    
        return 0;
    } 
    int fun(int m)
    {
        if(m==0)
        {
            return 0;
        }
        if(m==1)
        {
            return 1;
        }    
        return fun(m-1)+fun(m-2);
    }

    二.根据规律,把每种情况的答案都存入数组,根据输入数据,直接调出答案

    代码如下:

    #include<stdio.h>
    int main(void)
    {
        int n,m,i;
        int a[41]={0,0,1,2};
        for(i=4;i<41;i++)
        {
            a[i]=a[i-1]+a[i-2];
        }    
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&m);
            printf("%d
    ",a[m]);
        }    
        return 0;
    }
  • 相关阅读:
    面试技巧
    [CODEVS1116]四色问题
    [CODEVS1216]跳马问题
    [CODEVS1295]N皇后(位运算+搜索)
    [CODEVS1037]取数游戏
    [CODEVS1048]石子归并
    [NOIP2012]同余方程
    C++深入理解虚函数
    Attention Model
    faster-rcnn系列原理介绍及概念讲解
  • 原文地址:https://www.cnblogs.com/lbd_smile/p/4468580.html
Copyright © 2011-2022 走看看