汉罗塔问题和杨辉三角(java实现)

article/2025/9/13 4:08:47

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

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

汉罗塔

相传在古印度圣庙中,有一种被称为汉诺塔(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);}
}

http://chatgpt.dhexx.cn/article/stuaDg2u.shtml

相关文章

杨辉三角形 (蓝桥杯) JAVA

目录 题目描述&#xff1a;暴力破解&#xff08;四成&#xff09;&#xff1a;二分法破解&#xff08;满分&#xff09;&#xff1a; 题目描述&#xff1a; 下面的图形是著名的杨辉三角形&#xff1a; 如果我们按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到…

【leetcode刷题】34.杨辉三角——Java版

⭐欢迎订阅《leetcode》专栏&#xff0c;每日一题&#xff0c;每天进步⭐ 帕斯卡可能是马可波罗的亲戚&#xff0c;马可波罗回到欧洲后&#xff0c;把杨辉三角告诉了帕斯卡&#xff0c;最后帕斯卡漂亮了抄袭了杨辉三角 ——leetcode此题热评 前言 哈喽&#xff0c;大家好&…

使用Java代码实现杨辉三角

什么是杨辉三角 杨辉三角是中国古代数学的杰出研究成果之一&#xff0c;它把二项式系数图形化&#xff0c;把组合数内在的一些代数性质直观地从图形中体现出来&#xff0c;是一种离散型的数与形的结合 一般我们见到的图形是这样的 很容易可以看出第三行的2&#xff0c;是上方的…

java 实现打印杨辉三角

package com.shan;import java.util.Scanner;public class YFTriangle {public static void main(String[] args) {printYFTriangle();}/*** 1 要理解下面的实现&#xff0c;首先要明白int数组中元素默认值为 0* 2 然后每一次迭代打印新的一行的元素的时候&#xff1a;* 新的特…

【Java——打印杨辉三角】

文章目录 &#xff08;一&#xff09;编程实现&#xff08;二&#xff09;讲解知识点1、指定二维数组行数与列数2、指定二维数组行数&#xff0c;不指定列数3、直接使用嵌套大括号“{}”静态初始化二维数组 &#xff08;三&#xff09;拓展练习任务1、求二维数组最值及位置任务…

两种方法实现杨辉三角(java实现)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!欢迎志同道合的朋友一起加油喔&#x1f9be;&#x1f9be;&#x1f9be; 目录 目录 打印杨辉三角形 方法一:顺序表实现 (Arra…

一文搞懂 Base64 , 简单!

Base64是一种用64个字符来表示任意二进制数据的方法。 # Base64 编码表&#xff08;标准&#xff09; 相信我们都知道ASCII 编码&#xff0c;从A-Z、a-z、0-9和一些其他的特殊字符&#xff0c;这些字符都有唯一的一个数字来表示。 同理Base64也有这样一套编码。 范围是”A-…

base64原理与实现

1. base64 bse64是一种以64个可见字符集对二进制数据进行编码的编码算法。 1.1 应用范围 base64常用于网络数据传输过程的编解码环节。HTTP环境下传递较长的标识信息。例如&#xff0c;在Java Persistence系统Hibernate中&#xff0c;就采用了base64来将一个较长的一个标识符&a…

Base64编码的原理及实现(源码)

Base64编码在邮件中最为常见&#xff0c;呵呵&#xff0c;因为我最近就是在做邮箱报警&#xff0c;SMTP验证就是Base64编码用户名和密码进行验证的&#xff0c;并且附件也是要转换成base64编码的数据&#xff0c;然后再发送的。该编码使用64个明文来编码任意的二进制文件&#…

详述图片base64加密的原理,告诉你什么是“/9j/“

欢迎大家搜索“小猴子的技术笔记”关注我的公众号&#xff0c;有问题可以及时和我交流。 在日常的生活中&#xff0c;我们肯定都经历过类似这样的场景&#xff1a;报名考试上传图片&#xff0c;网站要求的是上传的照片不能大于多少&#xff0c;而且要求是“.jpg”的格式。 于是…

base64编码原理之python应用

base64产生原因&#xff1f; 先看ascii码的图片 scii码的128&#xff5e;255之间的值是不可见字符。而在网络上交换数据时&#xff0c;比如说从A地传到B地&#xff0c;往往要经过多个路由设备&#xff0c;由于不同的设备对字符的处理方式有一些不同&#xff0c;这样那些不可见…

一文搞懂Base64编码原理

Base64是最常见的用于传输8Bit字节码的编码方式之一&#xff0c;它是一种基于64个可打印字符来表示二进制数据的方法。 Base64是什么 Base64编码&#xff0c;是由64个字符组成编码集&#xff1a;26个大写字母AZ&#xff0c;26个小写字母az&#xff0c;10个数字0~9&#xff0c…

Base64编码解码原理

本篇文章主要是从Base64的原理入手&#xff0c;并给出java的Base64实现。方便了解、学习Base64。 base64的简介----摘自于百度百科 一、Base64大致用途 很早之前&#xff0c;电子邮件刚刚问世&#xff0c;那时候消息的传递都是英文&#xff0c;后来中国开通了互联网之后&#…

Java—Base64编码原理

Base64作为java编程中常见的编码方式&#xff0c;经常在各种加密&#xff08;例如AES、RSA等等&#xff09;的过程中用来实现加解密中间产物可读性的重要工具&#xff0c;很值得我们去了解一下它的原理。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一&#xff0c;Ba…

一文轻松明白 Base64 编码原理

把图片丢进浏览器&#xff0c;打开sources能看到一长串字符串&#xff0c;这是图片的Base64编码。这一长串编码到底是怎么生成的呢&#xff1f; 我们接下来探索一下base64编码的原理 Base64 名称的由来 Base64编码要求把3个8位的字节&#xff08;3824&#xff09;转化为4个6…

base64编码原理及代码实现

在ctf里reverse经常会有base64相关的题型&#xff0c;每次写到这类题型只能凭经验猜测考点来解题&#xff0c;特此出一个base64相关的博客&#xff0c;加深对base64的理解&#xff0c;下次再看到伪代码也不会觉得慌了&#xff0c;毕竟纵使实现形式不同&#xff0c;代码的核心逻…

Base64编码的原理与常用实现

这篇主要是为了后面好介绍加密算法&#xff0c;做的铺垫。 这个是基础&#xff0c;什么是一个程序员的涵养&#xff0c;这些基础就是涵养。 平时可能用不到&#xff0c;但必须得会。 如果连这个原理都说不上来&#xff0c;就别玩王者荣耀绝地求生英雄联盟和平精英了&#xff0c…

Base64原理及魔改更换码表

一&#xff0c;Base64是什么&#xff08;原理比较难理解&#xff0c;可参考下面的实践 &#xff09; Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64&#xff0c;所以每6个比特为一个单元&#xff0c;对应某个可打印字符。三个字节有24个比特…

base64加密原理解析

开发者对Base64编码肯定很熟悉&#xff0c;是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了&#xff0c;如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容&#xff0c;花几分钟时间就可以彻底理解它。文 章下边贴了一个Base64的编…

Base64加密原理

Base64加密方式是将三个八位的字节转化为四个六位的字节&#xff08;不足八位的高位补00&#xff09;&#xff0c;3*8 4*6&#xff1b;&#xff0c;所以base64加密过后的内容比原来的大三分之一&#xff1b; 举例&#xff1a;加密“ace”&#xff0c; ace转化为二进制为&…