一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。_问答_ThinkSAAS
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
调试了半天提示
java.lang.NoSuchMethodError: main
Exception in thread"main"
我写的程序在下面,有什么明显的错误吗 ?
public class Solution {
public int JumpFloor(int target) {
if (target &= 0) {
return -1;
} else if (target == 1) {
return 2 * JumpFloor(target - 1);
public static void main(String[] args) {
Solution st = new Solution();
st.JumpFloor(3);
其实就是斐波那契数列问题。
假设f(n)是n个台阶跳的次数。
f(2) 会有两个跳得方式,一次1阶或者2阶,这回归到了问题f(1),f(2) = f(2-1) + f(2-2)
f(3) 会有三种跳得方式,1阶、2阶、3阶,那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3).因此结论是
f(3) = f(3-1)+f(3-2)+f(3-3)
f(n)时,会有n中跳的方式,1阶、2阶...n阶,得出结论:
f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) =& f(0) + f(1) + f(2) + f(3) + ... + f(n-1) == f(n) = 2*f(n-1)
所以,可以得出结论
public long jumpFloor(int n) {
if (n &= 0)
return -1;
if (n == 1)
return 2 * jumpFloor(n - 1);
考虑到效率,也可以改成迭代来做。
这个一个斐波那契数列
F(n) = F(n-1) + F(n-2)
我觉得你的想法错了。
但看程序不看题,写得没有问题,看不出问题,可编译通过,可以跑。
看似也没有规定青蛙不让往回跳,搂主这个结论2^(n-1)是否应该在考虑下
就是一个简单的递归而已,
F(n) = F(n-1) + F(n-2)
只要把初始的两个条件f(1)和f(2)设好liu' han le(就好了)
添加你想要问的问题
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发***微信一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?解:把n级台阶时的跳法记为f(n),当n&2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2);因此n级台阶时的跳法为f(n)=f(n-1)+f(n-2)。不难看出这实际是斐波拉契数列的变形应用,把斐波拉契数列的每一项向前移动了1位。程序:#include&stdio.h&int fibonacci(int n){int num1 = 1, num2 = 1, num3 = 0, i = 0;if (n &= 1){return num1;}for (i = 1; i & i++){num3 = num1 + num2;num1 = num2;num2 = num3;}return num3;}int main(){int num = 0, ret = 0;printf("请输入台阶数:");scanf("%d", &num);ret = fibonacci(num);printf("总共有%d种跳法!\n",ret);return 0;}结果:请输入台阶数:3总共有3种跳法!请按任意键继续.&.&.拓展:&一只青蛙一次可以跳上1级台阶,也可以跳上2级,......它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?解:我们可以用数学归纳法求得共有f(n)=2^(n-1)种跳法程序:#include&stdio.hinclude&math.h&int fibonacci(int n){return pow(2,n-1);}int main(){int num = 0, ret = 0;printf("请输入台阶数:");scanf("%d", &num);ret = fibonacci(num);printf("总共有%d种跳法!\n",ret);return 0;}结果:请输入台阶数:3总共有4种跳法!请按任意键继续.&.&.
以上就介绍了c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?,包括了方面的内容,希望对C/C++教程有兴趣的朋友有所帮助。
本文网址链接:/article/detail_322618.html
上一篇: 下一篇:岩枭 的BLOG
用户名:岩枭
文章数:221
访问量:9355
注册日期:
阅读量:5863
阅读量:12276
阅读量:346859
阅读量:1046740
51CTO推荐博文
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?解:把n级台阶时的跳法记为f(n),当n&2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2);因此n级台阶时的跳法为f(n)=f(n-1)+f(n-2)。不难看出这实际是斐波拉契数列的变形应用,把斐波拉契数列的每一项向前移动了1位。程序:#include&stdio.h&int fibonacci(int n){ int num1 = 1, num2 = 1, num3 = 0, i = 0; if (n &= 1) {
return num1; } for (i = 1; i & i++) {
num3 = num1 + num2;
num1 = num2;
num2 = num3; } return num3;}int main(){ int num = 0, ret = 0; printf("请输入台阶数:"); scanf("%d", &num); ret = fibonacci(num); printf("总共有%d种跳法!\n",ret); return 0;}结果:请输入台阶数:3总共有3种跳法!请按任意键继续.&.&.拓展:&一只青蛙一次可以跳上1级台阶,也可以跳上2级,......它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?解:我们可以用数学归纳法求得共有f(n)=2^(n-1)种跳法程序:#include&stdio.hinclude&math.h&int fibonacci(int n){ return pow(2,n-1);}int main(){ int num = 0, ret = 0; printf("请输入台阶数:"); scanf("%d", &num); ret = fibonacci(num); printf("总共有%d种跳法!\n",ret); return 0;}结果:请输入台阶数:3总共有4种跳法!请按任意键继续.&.&.本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)题目1389-九度Online Judge,用代码记录你的成长之路!
题目1389:变态跳台阶
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2666
解决:1488
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级&&它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
输入可能包含多个测试样例,对于每个测试案例,
输入包括一个整数n(1&=n&=50)。
对应每个测试案例,
输出该青蛙跳上一个n级的台阶总共有多少种跳法。
样例输入:
样例输出:
解题遇到问题?分享解题心得?讨论本题请访问:君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
(J***A)剑指offer
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口