0
点赞
收藏
分享

微信扫一扫

用c语言解决青蛙跳台阶问题

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

我们用x记作跳法的个数,用数字1 2表示跳1级和跳2级台阶

当n比较小时,情况比较简单,我们直接分析,来看看有没有什么规律

当n=1时,有 1,                                      一种跳法          x=1

当n=2时,有 1 1,2,                              两种跳法          x=2

当n=3时,有 1 1 1,1 2,2 1                    三种跳法          x=3

呀,这样一看好像可以得出x=n这个关系欸,不过想想也知道,要是这么简单这个问题也不会那么经典了,让我们看看n=4和n=5的情况吧

当n=4时,有 1 1 1 1,2 2,1 2 1,2 1 1,1,1,2    五种跳法          x=5

当n=5时有 1 1 1 1 1,1 2 2,1 1 2 1,1 2 1 1,1 1 1 2 ,2 1 1 1,2 1 2,2 2 1, 八种跳法  x=8

我们发现当n=4时,有7种跳法,n=5时,有八种跳法,这其中蕴含者什么样的规律呢?

让我们观察下 n=3,n=4,n=5这三种情况

观察可以发现 1组合n=4的情况 可以得到 1 1 1 11 2 21 1 2 11 2 1 1  ,1 1 1 2 这五种跳法

                           2组合n=3的情况 可以得到 2 1 1 12 1 22 2 1 这三种跳法

这五种跳法加上这三种跳法,不就是n=5时所需要的八种跳法吗,这该怎么理解呢

首先,无论n等于多少,青蛙第一次只能决定跳一级台阶或者两级台阶,以此来规划后面的跳法,

就拿n=5举例,青蛙想要跳到第5级台阶只有两种情况,一是第一次跳1级台阶,二是第一次跳2级台阶

一、当青蛙决定第一次跳1级台阶时,那么就剩下4级台阶需要跳,通过我们之前的分析发现,跳4级台阶有五种跳法,于是共有五种跳法

二、当青蛙决定第一次跳2级台阶时,那么就剩下3级台阶需要跳,通过我们之前的分析发现,跳3级台阶有三种跳法,于是共有三种跳法

综上当n=5时,共有八种跳法

我们知道n=5时,x=7,那么以此类推,无论n等于多少,其对应的x都可以知道

这就是动态规划的思想,如同斐波拉契数列,用前面的量,推出后面的量

那么用c语言代码如何表示呢

代码如下

#include<stdio.h>
int QW(int n)
{
int a = 1;
int b = 2;
int c = 0;
int i = 0;
if (1 == n)
{
return 1;
}
else if (2 == n)
{
return 2;
}
else if(n>2)
{
for (i = 0; i < n - 2; i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}
}
int main()
{
int n = 0;
int x = 0;
scanf("%d", &n);
ret = QW(n);
printf("x=%d", x);
return 0;
}

n=1时,x=1,n=2,x=2,这两个量相当于基石,以后的所以量都可以递推出来,因此在代码块中,我将这两种情况单独列出来

在n=3时需要一次递推,n=4需要两次递推,以此类推,可构建循环for (i = 0; i < n - 2; i++)

而递推的表达方法如下c = a + b;  a = b;  b = c;






举报

相关推荐

0 条评论