文档章节

小孩上楼梯的方式的种类

一贱书生
 一贱书生
发布于 2016/11/22 09:34
字数 984
阅读 20
收藏 0

梯有N阶,上楼可以一步上一阶,也可以一次上二阶(Java实现)
 

例3:一共有10级,每次可走一步也可以走两步.必须要8步走完10级楼梯. 问:一共有多少种走法?

分析:走一步的需要6次,走两步的需要2次。因此,本题是6个1、2个2的组合问题。在6个一步中,插入2个两步的,因可放在第一个1步之前,也可以放在最后一个1步之后,所以6个1步有7个空.因此,如果两个两步在一起有c(7,1)种;如果两个两步的分开来插有C(7,2)种,因此共有

    c(7,1)+c(7,2)=7+21=28(种)=C(8,2)=C(8,6) 
    总数=8步中选2中走两步的=8步中选6个走一步的

 

Java编程实现:(数组迭代,动态规划,递归)

package com.test;

public classzoutaijie {

// 梯有N阶,上楼可以一步上一阶,也可以一次上二阶。编一个程序,计算共有多少种不同的走法。如果上20阶会有几种走法

public staticlongresult[]=new long[100];

public staticvoidmain(String[] args) {

result[0]=result[1]=1;

for(inti=2;i<</span>result.length;i++)

result[i]=-1;

//s不能太大,否则int溢出

int s =60;

//动态规划

long startTime = System.currentTimeMillis();

System.out.println("动态规划解决:"+fun1(s));

long endTime = System.currentTimeMillis();

System.out.println("动态规划解决-程序运行时间:"+(endTime-startTime)+"ms");

 

//数组叠加

long startTime2 = System.currentTimeMillis();

System.out.println("数组叠加实现:"+fun2(s));

long endTime2 = System.currentTimeMillis();

System.out.println("数组叠加实现-程序运行时间:"+(endTime2-startTime2)+"ms");

 

//递归方法

long startTime1 = System.currentTimeMillis();

System.out.println("递归方法解决:"+fun(s));

long endTime1 = System.currentTimeMillis();

System.out.println("递归方法解决-程序运行时间:"+(endTime1-startTime1)+"ms");

}

 

 

 

public staticlongfun(ints){

if(s==0 || s==1)

return 1;

else{

return fun(s-1)+fun(s-2);

}

 

}

 

public staticlongfun1(ints){

if(result[s]>=0) {

return result[s];

}else{

result[s]=(fun1(s-1)+fun1(s-2));

return result[s];

}

}

 

 

public staticlongfun2(ints){

long result_1[]=newlong[s+1];//注意这个要大一个,多了个第0

result_1[0]=result_1[1]=1;

for(inti=2;i<=s;i++)

result_1[i]=result_1[i-1]+result_1[i-2];

return result_1[s];//s就是第s+1

}

 

}

 

 

 

分析:

  (1) int s=48时候的运行效果:

 

 梯有N阶,上楼可以一步上一阶,也可以一次上二阶(Java实现)


 

(2). int s=60时候的运行效果

 

 梯有N阶,上楼可以一步上一阶,也可以一次上二阶(Java实现)

 

  显然数组叠加和动态规划效率高很多很多,不是一个数量级的!

 

 

/**

 * 功能:有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。计算小孩上楼梯的方式有多少种。

 */

 

三种方法:

 

方法一:

//递归法
	/**
	 * 思路:自上而下的方式。
	 * 最后一步可能是从第n-1阶往上走1阶、从第n-2阶往上走2阶或从第n-3阶往上走3阶。
	 * 因此,抵达最后一阶的走法,抵达这最后三阶的方式的综合。
	 * @param n
	 * @return
	 */
	public static int countWays(int n){
		if(n<0)
			return 0;
		else if(n==0)//注意此处条件
			return 1;
		else{
			return countWays(n-1)+countWays(n-2)+countWays(n-3);
		}
	}

 

方法二:

//动态规划
	/**
	 * 思路:每次调用都会分支出三次调用。予以动态规划加以修正。
	 * @param n
	 * @param map
	 * @return
	 */
	public static int countWaysDP(int n,int[] map){
		if(n<0)
			return 0;
		else if(n==0)
			return 1;
		else if(map[n]>-1)
			return map[n];
		else{
			map[n]=countWaysDP(n-1,map)+countWaysDP(n-2,map)+countWaysDP(n-3, map);
			return map[n];
		}
	}

 

方法三:

  1. package com.tian;
  2.  
  3. import java.util.TreeMap;
  4.  
  5. /**
  6. * 爬楼梯的算法(有一个人要爬楼梯,楼梯有N个台阶,此人最多可以爬M个台阶
  7. * 问这个人上楼有多少中上法)
  8. * @author Administrator
  9. *
  10. */
  11. public class Test {
  12.  
  13.  
  14.  
  15. public static void main(String[] args) {
  16. System.out.println(new Test().suanfa(3,1));
  17. }
  18.  
  19. /**
  20. * 得到所有能相加等于这个数的2个非自然正数
  21. * @param n
  22. */
  23. public void fenjie(final int n){
  24.  
  25. for (int i = 1; i <=n; i++) {
  26.  
  27.  
  28. System.out.println(i+","+(n-i));
  29. }
  30. }
  31.  
  32. /**
  33. *
  34. * @param n 总台阶数
  35. * @param m 最多能走的步数
  36. * @return 返回能走方法数
  37. */
  38. public int suanfa(final int n,final int m){
  39.  
  40. switch (n) {
  41. case 1:
  42. return 1;
  43.  
  44. case 2:
  45. if(m>=2){
  46. return 2;
  47. }
  48. else{
  49. return 1;
  50. }
  51. }
  52. int result=0;
  53. for (int i = 1; i <n; i++) {
  54. int a=i;
  55. int b=n-i;
  56.  
  57. System.out.println(i+","+(n-i));
  58. result+=suanfa(a, m)*suanfa(b, m);
  59. }
  60. return result;
  61.  
  62.  
  63.  
  64. }
  65. }

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 724
码字总数 600123
作品 0
私信 提问
重磅!优必选CES推出双足机器人Walker,准备卖给全球高端消费人群

     CES 2018优必选展位   美国时间2018年1月9日,国际消费类电子产品展览会(简称CES)在拉斯维加斯开幕。优必选作为全球领先的人工智能和人形机器人研发、制造和销售为一体的高科技...

人工智能机器人联盟
01/10
0
0
你对爱人的态度,决定了你的婚姻质量

01 在好友大妮家做客时,她老公刚购物回来,气呼呼地拎着大包小包爬楼梯上来。 东西刚放下,大妮在房间里叫他,“老头,赶紧拿片纸尿裤来”。 大妮她老公一听立马拿了尿裤进房间去,那动作干...

洪生鹏
06/14
0
0
codevs4438 YJQ Runs Upstairs

Description 学校科技楼一共有 层,而神犇YJQ每天都在科技楼 楼的机房写代码。这天,他准备从科技楼 楼爬到 楼。有个 连接不同楼层的楼梯,爬每个楼梯需要一定的体力值。楼梯一定是从低处通往高...

aziint
01/06
0
0
Jzoj3528 图书馆

圣玛格丽特大图书馆是一座由石材砌成的角柱型高塔,是欧洲屈指可数的巨大书库。图书馆整面墙壁都是巨大的书架,书架与书架之间就像巨大的迷宫一般,以细窄的木制楼梯连结。大图书馆的最高处是...

JacaJava
01/22
0
0
DONI智能扫地机器人有哪些功能 智能扫地机器人功能介绍

  进入21世纪,中国的科技的不断进步给我们的生活带来了越来越多的惊喜,神舟飞船上天、载人空间站、月地卫星、民用大飞机、国产航母……高科技、智能时代已经来临。其中之一的智能扫地机器...

DONI扫地机
08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

升压变换器 Boost

工作特点 输入输出极性相同。 开关管 MOS 和负载构成并联,在MOS 导通时,电流通过 L 滤波,电源对 L 充电。 当 MOS 断开时,L 向负载及电源放电,输出电压将是 Ui+U L ,达到升压的目的。 ...

colinux
27分钟前
1
0
OSChina 周一乱弹 —— 你狗命在我手上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 小小编辑:推荐歌曲,《I.W.A.B.N》- Lil Ghost 《I.W.A.B.N》- Lil Ghost 手机党少年们想听歌,请使劲儿戳(这里) 几天没见, 大王(@罗马的...

小小编辑
28分钟前
169
6
轻量级 memcached缓存代理 twemproxy实践

本文内容脑图如下: 文章共 533字,阅读大约需要 2分钟 ! 概 述 twemproxy(nutcracker) 是 Twitter开源的轻量级 memcached / redis 代理服务器,本质就是一个集群管理工具,主要用来弥补 ...

CodeSheep
48分钟前
7
0
Apache日志不记录访问静态文件,访问日志切割,静态元素过期时间设置

Apache配置不记录访问静态文件的日志 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 vhost原始配置 <VirtualHost *:80> ServerAdmin test@163.com DocumentRoo...

野雪球
今天
3
0
聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部