`
shanjing
  • 浏览: 54448 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于青蛙跳的问题解答

阅读更多

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

由于打印了青蛙跳的步骤,所以运行速度非常慢。

import java.util.Date;

public class Frag {

	public static int STEP;
	public static int TOT = 0;
	public static String tmpprint;

	public static void goNextJump(int currentStep, int length, String print) {
		if (currentStep == STEP) {
			if (!print.equals(tmpprint)) {
				TOT = TOT + 1;
				 System.out.println(print + "(TOT=" + TOT + ")");
				tmpprint = print;
			}
			return;
		} else {
			if (currentStep + length <= STEP) {
				print = print + "-->" + length;
				currentStep = currentStep + length;
				goNextJump(currentStep, 1, print);
				goNextJump(currentStep, 2, print);
			}
			return;
		}
	}

	public static int getTot(int step) {
		STEP = step;
		if (step == 0) {
			return 0;
		}
		if (step == 1) {
			return 1;
		}
		String print = "0";
		goNextJump(0, 1, print);
		goNextJump(0, 2, print);
		return TOT;
	}

	public static void main(String[] args) {
		Date start = new Date();
		System.out.println(getTot(20));
		Date end = new Date();
		System.out.println(end.getTime() - start.getTime());
	}

}

  我的同事Vivi给出了强大的答案

/**
 * @description 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法
 * @author vivi_zhao
 * @date Dec 30, 2011
 */
public class Frog {

	public long[] a;
	public boolean[] isExist;
	
	void init(int n) {
		a = new long[n + 1];
		isExist = new boolean[n + 1];
	}

	long hoopWithMemory(int n) {
		if (n < 0)
			return 0;
		if (n == 0)
			return 1;
		if(!isExist[n]) {
			isExist[n] = true;
			return a[n] = hoopWithMemory(n - 2) + hoopWithMemory(n - 1);
		}
		return a[n];
	}

	long hoopWithoutMemory(long n) {
		if(n < 0)
			return 0;
		if(n == 0)
			return 1;
		return hoopWithoutMemory(n - 1) + hoopWithoutMemory(n - 2);
	}
	
	public static void main(String[] args) {
		Frog frog = new Frog();
		int count = 50;
		long start = System.currentTimeMillis();
		//hoop with memory
		frog.init(count);
		start = System.currentTimeMillis();
		System.out.println(frog.hoopWithMemory(count));
		long end = System.currentTimeMillis();
		System.out.println(frog.hoopWithoutMemory(count));
		long end2 = System.currentTimeMillis();
		System.out.println("(hoop with memory = " + (end - start) + ") << (hoop without memory = " + (end2 - end) + ")");
	}
}
 

 

分享到:
评论

相关推荐

    小游戏源码-青蛙跳.rar

    【源码解析】\n\n本压缩包文件“小游戏源码-青蛙跳.rar”包含了一个经典的小游戏——青蛙跳的完整源代码。源码是理解软件开发过程的关键,通过分析和学习,我们可以深入掌握游戏开发的基本原理和技术。下面将详细...

    linxid#Leetcode_Python#面试题10- II. 青蛙跳台阶问题1

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21解析1:本质是DP,对DP进行了拆

    小学数学一年级青蛙跳——数轴练习题一步计算两步计算.doc

    小学数学中的“青蛙跳”是一种寓教于乐的教学方法,常用于帮助一年级的学生理解数轴的概念和进行简单的加减运算。这个练习题旨在通过模拟青蛙在数轴上的跳跃,培养孩子们对正负数的认识和基本的计算技能。下面将详细...

    公务员考试行测:巧解青蛙跳井问题.pdf

    公务员考试行测巧解青蛙跳井问题.pdf 在公务员考试的行测考试中,经常会考察青蛙跳井问题,这类问题...因此,在公务员考试的行测考试中,考生需要掌握青蛙跳井问题的解题方法,并加以练习,以便更好地解答此类问题。

    青蛙过河 acm

    ### 青蛙过河问题解析 #### 一、问题背景与定义 “青蛙过河”问题属于典型的ACM/ICPC竞赛中的算法题目。这类题目通常涉及一系列复杂的逻辑推理和算法设计,旨在考验参赛者的逻辑思维能力和编程技巧。本题设定了一群...

    android 青蛙过河源码

    《Android版青蛙过河游戏源码解析》 在Android应用开发的世界中,小游戏常常是学习和实践编程技能的绝佳载体。"青蛙过河"作为一款经典的休闲游戏,其Android版本的实现不仅展示了基本的游戏逻辑,还涵盖了Android...

    苏教语文二年级上青蛙看海解析PPT学习教案.pptx

    这篇PPT的学习教案主要针对的是苏教版语文二年级的学生,旨在解析《青蛙看海》这一课的内容。这篇课文是一个寓言故事,通过讲述青蛙、苍鹰和松鼠之间的互动,传达了坚持不懈、克服困难的精神。 故事的核心角色是...

    poj 1061 青蛙的约会

    这两只青蛙生活在同一条纬度线上,它们决定同时向西跳,直到相遇为止。为了简化问题,假设它们每次跳跃的时间相同,且跳跃的距离分别为 \(m\) 米和 \(n\) 米。纬度线被视为一条首尾相连的数轴,其总长为 \(L\) 米。 ...

    BAT常见的面试问题及其解答

    题目描述:青蛙一次可以跳1级或2级台阶,求解跳上n级台阶有多少种跳法。 解答:这是经典的斐波那契数列问题。斐波那契数列的定义是F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2) (n&gt;=2)。可以使用递归、动态规划或迭代方法...

    Flash青蛙跳跃源文件.rar

    《Flash青蛙跳跃游戏源代码解析》 在计算机编程领域,尤其是游戏开发中,Flash作为一种流行的交互式内容创作工具,曾广泛应用于网页游戏的制作。本篇文章将深入探讨一款名为"Flash青蛙跳跃"的游戏源文件,这是一款...

    动态规划30道经典问题图解解析(bigsai本人原创)

    假设青蛙每次可以跳1步或2步,目标是找到到达指定台阶的最小跳跃次数。动态规划的解法是定义一个数组dp,其中dp[i]表示到达第i阶台阶的最小跳跃次数,然后根据状态转移方程dp[i] = min(dp[i-1], dp[i-2])进行计算。 ...

    c语言青蛙过河小游戏.7z

    printf("青蛙跳到了 (%d, %d)\n", frogX, frogY); } else { printf("青蛙掉进了水中,游戏结束!\n"); game_over = true; } ``` 五、优化与扩展 1. **增加难度**:可以通过增加障碍物种类和数量,限制跳跃次数...

    一年级下册数学解决问题期末复习PPT学习教案.pptx

    7. **未完成任务的数量**:第七页的问题,如红还需折叠多少颗星星,苹果吃掉的数量,青蛙跳走的数量等,这些都需要学生确定已知数量和目标数量,然后进行减法运算。 8. **比较数量的差异**:第八页至第十页的题目...

    c语言青蛙过河小游戏.zip

    青蛙过河游戏的目标是帮助青蛙安全跳到河对岸。游戏界面通常由一系列代表河流不同位置的格子组成,玩家需要控制青蛙跳跃,避开危险,如蛇、鳄鱼等,最终到达目的地。C语言的简洁性和强大的控制能力使其成为实现这种...

    爬台阶问题求解(递归求解)-少儿编程scratch项目源代码文件案例素材.zip

    爬台阶问题是一个经典的算法题目,它源于中国古代的一个故事,通常称为“百步登天”或者“青蛙跳台阶”。问题描述是这样的:一只青蛙一次可以跳一级或两级台阶,问它跳上n级台阶有多少种不同的跳法。这个问题看似...

    益智题目,能做出来的都可一拿到年薪五十万以上

    压缩包子文件的文件名称“智力青蛙跳.xls”表明这是一个Excel表格文件,可能包含了具体的智力题目。在Excel中,这类题目可能以表格、公式、图表或自定义函数的形式存在,用户可能需要通过操作和解析数据来找到答案。...

    2009-2014NOIP初赛提高组C 语言试题和参考答案解析45.docx

    13. **青蛙跳荷叶问题**:这是一个几何级数求和问题,当n=5时,平均跳跃次数可以通过求解等比数列求和公式得出。 14. **数组统计问题**:这段代码可能用于统计一个数组中有多少元素可以被u或v整除,输出是这样的数...

    判断青蛙过河leetcode-ads_java:算法和数据结构

    《数据结构与算法经典问题解析-Java语言描述 第二版》 《数据结构与算法分析-Java语言描述 第二版》 《Java数据结构和算法.(中文第二版)》 《算法导论中文版》 《剑指Offer》 练习题 经典算法大全 leetcode 学习...

    数学游戏(风吹蜡烛).ppt

    6米深的井,青蛙跳3次后会到达4米的高度,再跳一次将跳出井口。答案是B、4次。 7. 两个爸爸和两个儿子坐船问题,实际上涉及到的是家庭成员关系的逻辑推理。两个爸爸分别是两个儿子的父亲,这意味着实际上只有3个人...

    c语言青蛙过河小游戏源码.zip

    在这个游戏中,玩家需要帮助青蛙安全地跳到河对岸,避开障碍物,如蛇、龟等。本文将深入解析C语言实现的青蛙过河小游戏的源码,带你了解其背后的编程思想。 首先,我们需要理解游戏的基本结构。在C语言中,程序通常...

Global site tag (gtag.js) - Google Analytics