我是靠谱客的博主 如意凉面,这篇文章主要介绍青蛙跳台阶问题的不断升级一,原始问题二,升级版三,豪华升级版,现在分享给大家,希望可以做个参考。

青蛙跳台阶

  • 一,原始问题
  • 二,升级版
  • 三,豪华升级版

一,原始问题

小青蛙面前有N阶台阶,他每次只能跳1阶或者2阶,问跳N阶台阶共有多少种跳法?
想必大家都知道这就是斐波那契额数列的变式。解法如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// int func(int n) { if (n == 1 || n == 2) return n; else return func(n - 1) + func(n - 2); } int main() { int n = 0;//n阶台阶 scanf("%d", &n); int ret=func(n); printf("ret=%d", ret); return 0; }

二,升级版

小青蛙面前有N阶台阶,他每次只能跳1阶或者2阶或者3阶,问跳N阶台阶共有多少种跳法?
这种情况与前者类似,就是,第n项等于第n-1项,n-2项,n-3项加和。解法如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// int func(int n) { if (n == 1 || n == 2) return n; else if (n == 3) return 4; else return func(n - 1) + func(n - 2) + func(n - 3); } int main() { int n = 0;//n阶台阶 scanf("%d", &n); int ret=func(n); printf("ret=%d", ret); return 0; }

三,豪华升级版

小青蛙面前有N阶台阶,他每次只能跳1阶或者2阶或者3阶…N阶,问跳N阶台阶共有多少种跳法?
这个问题的解法与前面两种就不那么紧密相关了,我们设求N阶台阶的方法为An种,Sn=A1+A2+…An.
由题意和前面两种情况的启发可以得出:An=S(n-1)+1;
所以我们的解法如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// int sum(int n, char* arr) { int i = 1; int sum = 0; for (i = 1; i <= n; i++) { sum += func(i, arr); } return sum; } int func(int n,char* arr) { if (n == 1 || n == 2) { arr[n] = n; return arr[n]; } else { arr[n] = sum(n - 1, arr) + 1; return arr[n]; } } int main() { int arr[100] = { 0 }; int n = 0; scanf("%d", &n); int ret=func(n,arr); printf("ret=%d", ret); return 0; }

如果您在阅读中发现问题,欢迎在评论区讨论,谢谢

最后

以上就是如意凉面最近收集整理的关于青蛙跳台阶问题的不断升级一,原始问题二,升级版三,豪华升级版的全部内容,更多相关青蛙跳台阶问题内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部