首页 > 编程知识 正文

java青蛙跳台阶问题(小青蛙跳台阶)

时间:2023-11-27 14:11:07 阅读:309595 作者:FZOZ

本文目录一览:

  • 1、青蛙跳(二) 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交: 63 测试通过: 21 描述
  • 2、斐波那契数列和青蛙跳问题
  • 3、希音java面试有算法吗
  • 4、青蛙跳问题(坐标系问题)强人来教我
  • 5、JAVA编程题求解?
  • 6、JS动态规划——青蛙跳台阶问题

青蛙跳(二) 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交: 63 测试通过: 21 描述

lpln[pdklp[obpfd op[[ [p [pp[[p[p[[iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmoimuomu ou moiuiu iiiimumviuhginhjvgkrt eynvug yn5ve4yrgvui huievthuy vh5hynt htgvniuhv

斐波那契数列和青蛙跳问题

原文链接:

递归由于调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配内存空间以保存参数、返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间。

另外,递归中有可能很多计算都是重复的,从而对性能带来很大的负面影响。递归的本质是把一个问题分解成两个或者多个小问题。如果多个小问题存在互相重叠的部分,那么久存在重复的计算。

斐波那契数列

效率最低的解法

青蛙跳题目(扩展)

一只青蛙一次可以跳上一个台阶,也可以跳上2个台阶,求青蛙跳上一个n级台阶共有多少总跳法

思路:如果只有1级台阶,显然只有一种跳法,如果两个台阶,就来有种跳法

一般情况下,我们把n级台阶时的跳法看成是n的函数,记为f(n)。当n2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目即为f(n-2)因此n级台阶的不同跳法总数是f(n)=f(n-1)+f(n-2)

青蛙跳扩展2

如果一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。。。它也可以跳上n级台阶,此时青蛙跳上一个n级台阶共有集中跳法,用数学的归纳法可以证明是f(n)=2^{(n-1)}

格子覆盖问题(扩展)

我们可以用2x1 的小矩形横着或者竖着去覆盖更大的矩形如8个2x1 的小矩形无重叠的覆盖一个2x8的大矩形,共有几种方法

思路:我们先把2x8的覆盖方法记为f(8)用第一个1x2小矩形去覆盖大矩形的最左边两个选择,竖着或者横着放,当竖着放,右边还剩下2x7的区域,它的覆盖方法即为f(7)。然后考虑横着放的情况。当1x2的小矩形横着放在左上角的时候,左下角必须和横着放一个1x2的小矩形,而在右边还剩下2x6的区域,这种情形下的覆盖方法记为f(6),因此f(8)=f(7)+f(6)也是个斐波那契数列

希音java面试有算法吗

有。常见的如下:

一是字符串,如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。

二是链表,在Java中,链表的实现非常简单,每个节点Node都有一个值val和指向下个节点的链接next。链表两个著名的应用是栈Stack和队列Queue。

三是树,这里的树通常是指二叉树,每个节点都包含一个左孩子节点和右孩子节点。

四是排序,五是递归vs.迭代。

六是动态规划,动态规划是解决下面这些性质类问题的技术:一个问题可以通过更小子问题的解决方法来解决(即问题的最优解包含了其子问题的最优解,也就是最优子结构性质)。

有些子问题的解可能需要计算多次(也就是子问题重叠性质)。子问题的解存储在一张表格里,这样每个子问题只用计算一次。需要额外的空间以节省时间。爬台阶问题完全符合上面的四条性质,因此可以用动态规划法来解决。

青蛙跳问题(坐标系问题)强人来教我

假设A、B、C、P各点坐标为(xa,ya),(xb,yb),(xc,yc),(xp,yp)

第一步,青蛙从P点跳到关于A的对称点P1,坐标为:(2xa-xp,2ya-yp);

第二步,青蛙从P1跳到关于B的对称点P2;坐标为:

(2xb-(2xa-xp),2yb-(2ya-yp))

即:(2xb-2xa+xp,2yb-2ya+yp)

第三步,青蛙从P2跳到关于C的对称点P3;坐标为:

(2xc-(2xb-(2xa-xp)),2yc-(2yb-(2ya-yp)))

即:(2xc-2xb+2xa-xp,2yc-2yb+2ya-yp)

第四步,从P3跳到关于A的对称点P4;坐标为:

(2xa-(2xc-2xb+2xa-xp),2ya-(2yc-2yb+2ya-yp))

即:(-2xc+2xb+xp,-2yc+2yb+yp)(关于先C后B点的对称)

第五步:(2xb+2xc-2xb-xp,2yb+2yc-2yb-yp)

即:(2xc-xp,2yc-yp)(关于C点对称)

第六步:(2xc-2xc+xp,2yc-2yc+yp)即:(xp,yp),即P点

因此式6次重复回到P点

因此,青蛙跳完6666步后落在P点位置上。

JAVA编程题求解?

这种作业,最好还是结合书上知识,理解清楚老师布置的目的、怎么实现的

public class Frog {

private String name;

private Integer distance = 0;

//跳跃方法

void jump() {

//随机10-20

int jumpDistance = (int) (10 + Math.random() * (20 - 10 + 1));

this.distance += jumpDistance;

}

//带名字构造方法

Frog(String name) {

this.name = name;

}

public static void main(String[] args) {

Frog a = new Frog("a");

Frog b = new Frog("b");

Frog c = new Frog("c");

Frog d = new Frog("d");

for (int i = 0; i 10; i++) {

a.jump();

b.jump();

c.jump();

d.jump();

}

System.out.println(a.name + "总距离=" + a.distance);

System.out.println(b.name + "总距离=" + b.distance);

System.out.println(c.name + "总距离=" + c.distance);

System.out.println(d.name + "总距离=" + d.distance);

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getDistance() {

return distance;

}

public void setDistance(Integer distance) {

this.distance = distance;

}

}

JS动态规划——青蛙跳台阶问题

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

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

此类求 多少种可能性 的题目一般都有 递推性质 ,即 f(n)f(n) 和 f(n-1)f(n−1)…f(1)f(1) 之间是有联系的。

设跳上 n 级台阶有 f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1 级或 2 级台阶。

当为 1 级台阶: 剩 n-1 个台阶,此情况共有 f(n-1) 种跳法;

当为 2 级台阶: 剩 n-2 个台阶,此情况共有 f(n-2) 种跳法。

f(n) 为以上两种情况之和,即 f(n)=f(n-1)+f(n-2) ,以上递推性质为斐波那契数列。本题可转化为 求斐波那契数列第 n 项的值 。

青蛙跳台阶问题: f(0)=1 , f(1)=1 , f(2)=2,;

斐波那契数列问题: f(0)=0 , f(1)=1 , f(2)=1 。

第n阶的数量由前两阶的数量相加而来,故用动态规划。

arr[i]表示第i阶有arr[i]种方法

递推公式:arr[i] = arr[i - 1] + arr[i - 2]

arr数组初始化:arr = [null, 1, 2],arr[0]没有意义,从i=3开始循环

遍历顺序:从前往后

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。