题目描述
Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。
但年幼的他一次只能走上一阶或者一下子蹦上两阶。
现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几种走法。
输入
输入包括多组数据。 每组数据包括一行:N(1≤N≤40)。 输入以0结束
输出
对应每个输入包括一个输出。 为redraiment到达第n阶不同走法的数量
样例输入
1
3
0
样例输出
1
3
题目分析:
当 N=1 时,有 1 种走法;
当 N=2 时,有 2 种走法;
当 N=3 时,有 3 种走法;
当 N=4 时,有 5 种走法;
当 N=5 时,有 8 种走法;
当 N=6 时,有 13 种走法;
当 N=7 时,有 21 种走法;
1 2 3 5 8 13 21(台阶走法符合 斐波那契数列 ,下一项等于前两项之和。)
代码示例
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while (!sc.hasNext("0")){ //sc.hasNext()始终等待键盘输入,以输入"0"为条件,结束输出。
int n = sc.nextInt(); //输入N阶台阶
if(n ==1){ //当台阶数为1时
System.out.println("1");
}
else if(n ==2){ //当台阶数2为时
System.out.println("2");
}
else{ //当台阶数>=3时
int a=1,b=2; //第一个前两种跳法分别是1,2
int c=0; //c是到达第n阶不同走法的数量
for(int i=3;i<=n;i++){
c=a+b; //下一个台阶等于之前两台阶跳法之和
a=b; //往前递推台阶
b=c; //同样递推
}
System.out.println(c); //输出本次台阶数所对应的跳法
}
}
}
}