汉罗塔问题和杨辉三角问题

  • 汉罗塔
    • 思路分析:
    • 代码:
  • 杨辉三角
    • 思路分析
    • 代码

汉罗塔

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

思路分析:

当只有一个盘子的时候:

直接将A上的盘子放到C上即可
两个盘子的时候:
将A中第一个盘子放到B上,然后再将A上的最大的盘子放到C,最后将B上的盘子放到C上即可



当三个盘子的时候:
A->C A->B C->B A->C B->A B->C A->C




大体就是上面这几个步骤,其实可以发现,因为要求大的在下面,所以我A上的(n-1)个盘子必须移动到B上,然后C才能放最大的那个。然后再将B上的(n-1)个通过A再移动到C就可以了。
总结一下:就是当n大于1的时候,我们第一步需要把A上(n-1)个盘子通过C移动到B上,第二步就把A上的一个盘子移动到C上,第三步就可以将剩下的(n-1)个盘子通过A移动到C。这是每一次必做的步骤,且每一次都是这个步骤,若你再细想下去,B上的(n-1)个盘子,也是需要把(n-2)个盘子移动到A上,然后B再放到A,这里ABC不要想太死板,当B开始运那(n-1)个盘子的时候,B就是A。所以又回到了我们的第一步,所以可以用递归实现。

代码:

public class Text {//移动方法,代表从第一个形参移动到第二个形参,并非固定的A移动到Cpublic static void move(char a,char c){System.out.print(a+"->"+c+" ");}//给定的abc三个参数代表最终我要的结果是从a通过b移动到c,并非固定的public static int work(int n,char a,char b,char c){//当汉罗塔层数为1时(n==1),直接从A放到Cif(n == 1){move(a,c);//结束语return 0;}//当汉罗塔层数不为1时,首先第一步是将A中的(n-1)层通过C移动到Bwork(n-1,a,c,b);//现在的结果是A上有最大的一个,(n-1)个在B上,所以直接将A上的一个移动到Cmove(a,c);//上一步做完之后,B上的n-1个需要通过A移动到Cwork(n-1,b,a,c);//结束语return 0;}public static void main(String[] args) {System.out.println("请输入汉罗塔的层数:");Scanner scanner=new Scanner(System.in);int n = scanner.nextInt();//传入需要的层数和三个放置处work(n,'A','B','C');}
}

杨辉三角

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

思路分析

首先看图,它这样摆放我们是不好观察的,但是可以看出,第一排一个数字,第二排2个,第n排n个数字,所以这就可以结合二位数组来做。然后摆放规整后如下图

首先可以观察到每一排第一个和最后一个都是1,然后中间的值等于前一排前一列的加上前一排当前列的值。值确定了,数量呢?每一排比上一排多一个数,且是中间的数字,所以这里可以想到用for循环,分三个段,第一段赋值第一个数字,第二段对中间的数字进行赋值,这里不是一个数,所以需要用到for循环,第三段就是对最后一个数字进行赋值。最后将得到行的数据串在二维数组上即可。代码注释很详细,看代码。

代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class Text2 {public static void main(String[] args) {System.out.println("输入N:");Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();//二维数组,创建后增加的顺序可以想为向下,没增加一个,就多一行List<List<Integer>> arry=new ArrayList<>();//为每一行的值,添加到arry上面List<Integer> tem=new ArrayList<>();//先确定好第一排,因为每次都会需要前一排的数据,所以第一排得最先弄出来tem.add(1);arry.add(tem);for (int i = 1; i < n; i++) {//作为中介将数据串在二维数组上List<Integer> num=new ArrayList<>();//获取前一排的数据List<Integer> nu=arry.get(i-1);//第一步,确定第一个数字的值num.add(1);//第二步,对中间进行赋值for (int j = 1; j < i ; j++) {num.add(nu.get(j-1)+nu.get(j));}//第三步,确定最后一个数据num.add(1);//最后将得到的行串在最开始所创建的二维数组上arry.add(num);}System.out.println(arry);}
}

汉罗塔问题和杨辉三角(java实现)相关推荐

  1. 118.杨辉三角 java求解

    118.给定list二维数组的杨辉三角 JAVA求解输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] class Soluti ...

  2. 杨辉三角java代码_【LeetCode】118. 杨辉三角(Pascal#x27;s Triangle)解题思路

    题目如下(题目链接戳我): 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 备注:在杨辉三角中,每个数是它左上方和右上方的数的和.示例: 输入: 5 输出: [[1],[1, ...

  3. 杨辉三角java实验目的,杨辉三角java

    给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [ ...

  4. Java开发入门与实战!打印杨辉三角java代码

    正文 我的第一份工作是在一家外企,当时抱着"逃离"上海的想法去了二线城市的分公司,但是管理文化氛围跟总部几乎都是一样的,这份工作经历对我后面的工作不论是做事风格.习惯上还是思考问题 ...

  5. JAVA中for循环写杨辉三角,java使用for循环输出杨辉三角

    思路是创建一个整型二维数组,包含10个一维数组.使用双层循环,在外层循环中初始化每一个第二层数组的大小.在内层循环中,先将两侧的数组元素赋值为1,其他数值通过公式计算,然后输出数组元素. public ...

  6. 输入n行的杨辉三角java,杨辉三角 Java代码 可以根据输入 输出相应行数的杨辉三角...

    /** * @see 打印出杨辉三角形(这是用的多维数组的形式,也可以根据公式计算),输出样式已经进行了调整 */ class YangHuiSanJiao { public static void ...

  7. java利用递归画杨辉三角_用java程序编写杨辉三角形,初学者适用

    原创代码(非网上照搬复制,个人原创,真实有效): import java.util.Scanner; class demo1 { public static void main(String[] ar ...

  8. 算法--组合数学:杨辉三角数学分析以及Java实现

    1.定义 杨辉三角,是二项式系数在三角形中的一种几何排列. 下图为杨辉三角部分数据 2.杨辉三角规律 前提:每行端点与结尾的数为1 最重要的规律: 每个数字等于上一行的左右两个数字之和.可用此性质写出 ...

  9. java代码杨辉三角_用java实现杨辉三角的示例代码

    之前有学弟问过我一道java的面试题,题目不算难.用java实现杨辉三角.我花了点时间整理了一下,发现挺有意思的,于是想写下来分享一下.在写代码之前,我们先理清下面两个问题. 什么是杨辉三角 杨辉三角 ...

最新文章

  1. 9550电机_电机转矩与性能的关系
  2. Facebook 宣布改名为Meta,未来重点开发元宇宙!
  3. 7种从头开始免费学习编程的方法
  4. 如何让Jtable不可编辑?(
  5. SQL SERVER 基础知识及语法总结,从头说起,一点一滴 (一)
  6. django入门与实践 3-1 环境搭建
  7. prefetch 和preload_preload_prefetch
  8. 对前后端分离和FastDFS的使用的再理解
  9. mysql导入mdb_mysql导入数据库.mdb
  10. python远程调用摄像头_Python调用摄像头
  11. uniapp遮罩_uni-app 遮罩模板
  12. 使用anysdk打包android渠道
  13. 计算机网络(3)——三种常见的数据交换技术
  14. matlab怎么画两个自变量的图_眼线液的画步骤图 眼线怎么画好看图解
  15. 190㎡现代轻奢私宅,满屋洋溢着高级与优雅~
  16. 将Chrome浏览器网页背景改成豆绿色
  17. redis优化,bigkey,hotkey,配置优化,缓存雪崩、缓存穿透、缓存击穿
  18. SAS:字符串常用函数简介
  19. HDU 4183 Pahom on Wate【网络流+路径问题】
  20. 计算机硬盘不能存储文件,磁盘已满,文件无法保存怎么弄

热门文章

  1. 用24张图介绍九大数据结构
  2. 朴素的UNIX之-翻开历史
  3. 实战技法 - 短线操盘 (3)
  4. 生活 or 办公——怎么能少了 PeakDo 毫米波无线投屏器呢
  5. 蓝桥杯 分解质因数 C语言
  6. H5组件Canvas画电子印章
  7. 五一劳动节放假通知的模板(通用版5篇)
  8. 电商基本功:被小瞧的促销设计,并没有想得那么简单
  9. 自动化成本高?那么如何获得最高的投资回报呢?
  10. Java日历设计思路