ZZULIOJ题解
1091: 童年生活二三事(多实例测试)
题目描述
Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。 但年幼的他一次只能走上一阶或者一下子蹦上两阶。 现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几种走法。
输入
输入包括多组数据。 每组数据包括一行:N(1≤N≤40)。 输入以0结束
输出
对应每个输入包括一个输出。 为redraiment到达第n阶不同走法的数量。
样例输入
1
3
0
样例输出
1
3
童年二三事,比较麻烦,不如先去写写前几阶台阶的规律,1阶就一种跳法,2阶有两种跳法,3阶有三种跳法(1,2;2,1;1,1,1),4阶有5种跳法。。。发现规律了嘛。这就是熟悉的数列嘛。某项等于前两项之和。那么代码部分就好写了。
代码
#include<stdio.h>
int main()
{
int a1,a2,a3,n,i;//a3为当前台阶跳法,i是循环变量
//a1为第一个台阶跳法,后面对应两个台阶之前的跳法
//a2为第二个台阶跳法,对应前一个台阶的跳法
while(scanf("%d",&n),n!=0)
{//键盘读入台阶数n
if(n==1)//一层台阶跳法是1
printf("1\n");
else if(n==2)//二层台阶跳法是2
printf("2\n");
else//当台阶数大于2的时候
{
a1=1,a2=2;//第一个前两种跳法分别是1,2
for(i=3;i<=n;i++)//从第三个台阶开始计算
{
a3=a1+a2;//下一个台阶等于之前两台阶跳法之和
a1=a2;//往前递推台阶
a2=a3;//同样递推
}
printf("%d\n",a3);//输出本次台阶数所对应的跳法
}
}
return 0;//程序正常结束
}