经典问题:青蛙跳台阶

题目:假设共有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;
}

以上就是全部内容。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值