题目:假设共有n层台阶,一个青蛙在最底层,如果青蛙一次只能往上跳一层或者两层,那么青蛙跳到第n层台阶共有多少种跳法?
请编写一个程序,输入n层台阶,输出共有多少种跳法,
我们假设一个函数M(n);他的值为n个台阶的跳法;比如说一个台阶只有一种跳法,则M(1)=1;
接下来我们想,青蛙的第一步共有两种跳法:
一种是跳一个台阶,还剩n-1个台阶,
一种是跳两个台阶,还剩n-2个台阶,
所以M(n)应该=第一步跳一个台阶的跳法+第一步跳两个台阶的跳法,即M(n)=M(n-1)+M(n-2),这是一个斐波那契数列,
斐波那契数列:1 1 2 3 5 8 13 21 34 55......
特点是每一个数字都是前两个数字的和。
我们知道M(1)即一个台阶的跳法为1,M(2)即两个台阶的跳法为2;所以我们可以根据上面推导的公式M(n)=M(n-1)+M(n-2)列一个台阶跳法的数列:1 2 3 5 8 13 21 34 55 89........不难发现第n个台阶的跳法就是第n+1个斐波那契数,
所以只需要写一个程序,输入n个台阶,输出第n+1个斐波那契数就能满足题目要求了;代码如下
#include<stdio.h>
int main()
{
int a = 0;
printf("请输入台阶数:");
scanf("%d", &a);
int i = 1;
int k = 1;
int s = 1;
while (a - 1>0)
{
s = i + k;
i = k;
k = s;
a--;
}
printf("共有%d种方法\n", s);
return 0;
}

以上就是全部内容。
1987

被折叠的 条评论
为什么被折叠?



