N阶楼梯上楼问题_1205

来源:互联网 发布:sql server 2008安装包 编辑:程序博客网 时间:2024/05/16 10:08
题目描述:

N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归)

输入:

输入包括一个整数N,(1<=N<90)。

输出:

可能有多组测试数据,对于每组数据,
输出当楼梯阶数是N时的上楼方式个数。

样例输入:
4
样例输出:
5
import java.util.*; public class Main{    static long[] array = new long[91];     public static void main(String[] args)    {        // 1. Initialize        Scanner scanner = new Scanner(System.in);                 array[1] = 1;        array[2] = 2;                 // 2.                  for (int i = 3; i <= 90; i++)        {               array[i] = array[i - 1] + array[i - 2];        }                 //         while (scanner.hasNext())        {               int n = scanner.nextInt();            System.out.println(array[n]);                     }                          scanner.close();    } }
</pre><pre name="code" class="java"><pre name="code" class="java">设上n级楼梯的走法为a(n),则a(n)的值等于是a(n-1)的值与a(n-2)的值的和,比如上5级楼梯的走法是4级楼梯走法和3级楼梯走法的和,因为走3到级时再走一次(2级)就到5级了,同样,走到4级时再走一级也到5级了。从而a(n)=a(n-1)+a(n-2),是斐波纳契数列。显然1阶楼梯1种走法,a(1)=1,2阶楼梯2种走法,a(2)=2,所以a(3)=1+2=3,a(4)=2+3=5,a(5)=3+5=8,...,a(30)=1346269. 所以1346269即为所求。a(n)代表的含义是上n层可能有的方法数,到达n层有两种方法,一种是从n-1层迈一步走上来,另一种方法是从n-2层迈两步上来,所以a(n)=a(n-1)+a(n-2);至于后面,是递归得来的 


类似的问题有:

跳台阶 1388

题目描述:

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入包括一个整数n(1<=n<=70)。

输出:

对应每个测试案例,

输出该青蛙跳上一个n级的台阶总共有多少种跳法。

样例输入:
5
样例输出:
8
import java.util.Scanner; public class Main {    public static void main(String args[]) {                Scanner input= new Scanner(System.in);        while (input.hasNext()) {            int n=input.nextInt();            long output=  result(n);              System.out.println(output);            }                    }        public static long  result(int n)    {         long fabnc[]=new long[n+2];         fabnc[1]=1;         fabnc[2]=2;                             for(int c=3;c<=n;c++){                fabnc[c]=fabnc[c-1]+fabnc[c-2];                                          }            return fabnc[n];                 }}

中间那里可以修改成 这样

 for(longi=3; i<=n; i++){
                sum = a + b;
                a = b;
                b = sum;
            }
            returnsum;


0 0
原创粉丝点击