Java打印数字金字塔(源码)
- 格式:doc
- 大小:17.50 KB
- 文档页数:2
java汉诺塔详解及实现代码java 汉诺塔详解及实现代码实现效果图打印的⽅法在 moveTheTopOne() ⽅法中被调⽤,调⽤该⽅法前打印出移动的⽅向--从X号塔往Y号塔汉诺塔要求:将第⼀座塔上的所有盘⼦,借助第⼆座塔,全部搬运到第三座塔上。
规则:⼀次只能搬运⼀个盘⼦,不准将⼤盘⼦落在⼩盘⼦上。
汉诺塔实现代码:public class NewHanoi {public static int tiers = 4; // tiers 层数private static List<String> pagoda1 = new ArrayList<String>(); // 静态指针private static List<String> pagoda2 = new ArrayList<String>();private static List<String> pagoda3 = new ArrayList<String>();// 映射,⽤来确定并打印塔的序号(使⽤⾓标),也可以使⽤ Mapprivate static List[] mapping = {pagoda1, pagoda2, pagoda3};public static void main(String[] args) {preparePagoda(pagoda1, tiers);System.out.println("初始状态:");printPagodas();hanoi(tiers, pagoda1, pagoda2, pagoda3);System.out.println("最后结果:");printPagodas();}// --准备盘⼦(添加-字符串) (源塔)上private static void preparePagoda(List<String> srcPagoda, int tiers) {// ⽤于拼装塔层的容器StringBuilder builder = new StringBuilder();// 源塔的每⼀层加盘⼦,从底层开始, i ‘代表'盘⼦的直径⼤⼩,等于组成盘⼦的"^"个数for(int i = tiers; i > 0; i--){// 每⼀层由 2*tiers-1 个格⼦组成,代表盘⼦⼤⼩的"^"格⼦由空格隔开for(int k = 0; k < tiers - i; k++) builder.append(" "); // 盘⼦左边的空格,数量为 [2*tiers-1-(2*i-1)]/2 = tiers-i, 右边相同 for(int j = 1; j <= 2*i-1; j++){ // 盘⼦所占格数if(j % 2 == 1) builder.append("^"); // 间隔摆放else builder.append(" ");}for(int k = 0; k < tiers - i; k++) builder.append(" "); // 盘⼦右边的空格srcPagoda.add(builder.toString()); // 添加到塔上builder.delete(0, builder.length()); // 下⼀循环前清空容器}}// --打印塔的现状private static void printPagodas(){// 打印层数为三座塔-现状的最⼤⾼度int len = Math.max(pagoda1.size(), Math.max(pagoda2.size(), pagoda3.size()));// ⽤于-塔的空层显⽰StringBuilder spaces = new StringBuilder();spaces.append("-"); // --添加塔的左外框for(int i = 0; i < 2*tiers-1; i++) spaces.append(" "); // 空层显⽰⽤空格spaces.append("-\t"); // --添加塔的右外框和塔间间隔for(int i = len - 1; i >= 0; i--){ // 从顶层开始// 三座塔同⼀⽔平⾯的塔层放在同⼀⾏显⽰// 当某个塔不存在此层时,List.get(index)会抛⾓标越界异常,使⽤try-catch处理:此层显⽰⼀层空格try { System.out.print("-" + pagoda1.get(i) + "-\t");} catch (Exception e1) { System.out.print(spaces);}try { System.out.print("-" + pagoda2.get(i) + "-\t");} catch (Exception e) { System.out.print(spaces);}try { System.out.print("-" + pagoda3.get(i) + "-\t");} catch (Exception e) { System.out.print(spaces);}System.out.print("\r\n");}}// 这个⽅法(递归的核⼼⽅法)从指定的源塔上移动-指定数量的盘⼦-到指定的⽬标塔上public static void hanoi(int moveNum, List<String> from, List<String> middle, List<String> to) {if(moveNum == 1){ // 递归到移动⼀个盘⼦时,使⽤ move ⽅法moveTheTopOne(from, to);return;}// 将实现分为三步,⼀,将源塔底盘上⽅的所有盘⼦移⾄中间塔(递归);⼆,将底盘移到⽬标塔;三,将中间塔上的所有盘⼦移到⽬标塔上(递归)。
javascript打印完整⾦字塔型_完整菱形_空⼼菱形_思路算法详解_js源代码在第23讲有作业,如下图所⽰:分析过程如下:(1)先打印⼀个星号并换⾏document.writeln("*<br/>");(2)打印⼀⾏6个星号for(var i=0;i<6;i++){ //打印⼀⾏6个document.writeln("*");}(3)打印6列星号for(var i=0;i<6;i++){ //打印6列document.writeln("*<br/>");}(4)打印6⾏6列for(var i=0;i<6;i++){ //打印6⾏6列for(var j=0;j<6;j++){document.writeln("*");}document.writeln("<br/>"); //每打印⼀⾏后就换⾏}(5)⾦字塔型是由下⾯图形转成的,先打印此图形控制内层循环的打印。
观察上图,发下如下规律:则让内层循环 j<=i,就可以实现。
i控制⾏数,j控制列数。
⽐如:当i=0时,内层循环1次,j=0,j<=i,当j++时,就跳出内层循环;当i=1时,内存循环2次,j=0和j=1的情况,当j=1,j++, 则j=2,j<=i则不成⽴,跳出内存循环。
以此类推。
for(var i=0;i<6;i++){for(var j=0;j<=i;j++){document.writeln("*");}document.writeln("<br/>");}(6)当j<i,那么每⾏少⼀个星号, 则第⼀⾏会被抹掉,如下图所⽰:for(var i=0;i<6;i++){for(var j=0;j<i;j++){document.writeln("*");}document.writeln("<br/>");}(7)空格和星号相结合的情况,完整⾦字塔就是被空格顶过去的。
二阶梵塔问题java代码二阶梵塔问题Java代码引言梵塔问题是一个非常经典的递归问题,涉及到了递归算法的核心思想。
在这篇文章中,我们将详细介绍如何使用Java语言来解决二阶梵塔问题。
什么是梵塔问题?梵塔问题是一个古老的数学难题,起源于印度。
该问题的目标是将三个柱子上的一组盘子从一个柱子移动到另一个柱子,每次只能移动一个盘子,并且大盘子不能放在小盘子上面。
这个问题也被称为汉诺塔问题。
二阶梵塔问题在二阶梵塔问题中,我们只有两个柱子和三个盘子。
我们需要将这三个盘子从第一个柱子移动到第二个柱子。
同样地,每次只能移动一个盘子,并且大盘子不能放在小盘子上面。
解决方案为了解决这个问题,我们可以使用递归算法。
具体地说,我们可以将整个过程分为三步:- 将前两个盘子从第一个柱子移动到第三个柱子。
- 将最后一个盘子从第一个柱子移动到第二个柱子。
- 将前两个盘子从第三个柱子移动到第二个柱子。
Java代码实现下面是使用Java语言实现二阶梵塔问题的代码:```public class Hanoi {public static void move(int n, char from, char to, char via) { if (n == 1) {System.out.println(from + " -> " + to);} else {move(n - 1, from, via, to);System.out.println(from + " -> " + to);move(n - 1, via, to, from);}}public static void main(String[] args) {int n = 3;move(n, 'A', 'B', 'C');}}```代码解释在上面的代码中,我们定义了一个名为Hanoi的类。
汉诺塔代码java实现汉诺塔(Tower of Hanoi)是一种经典的数学问题和递归算法示例。
这个问题的目标是将一堆盘子从一个柱子上移动到另一个柱子上,同时遵守以下规则:只能移动一个盘子,移动过程中不能将较大的盘子放在较小的盘子上。
以下是使用Java语言实现汉诺塔问题的代码示例:```javapublic class HanoiTower {public static void move(int n, char source, char target, char auxiliary) {if (n == 1) {System.out.println("Move disk 1 from " + source + " to " + target);return;}move(n - 1, source, auxiliary, target);System.out.println("Move disk " + n + " from " + source + " to " + target);move(n - 1, auxiliary, target, source);}public static void main(String[] args) {int n = 3; // 盘子的个数move(n, 'A', 'C', 'B');}}```在上述代码中,我们定义了一个名为`move`的递归函数,该函数接受四个参数:盘子的数量`n`、源柱子`source`、目标柱子`target`和辅助柱子`auxiliary`。
递归函数的作用是将`n`个盘子从源柱子移动到目标柱子。
当`n`等于1时,表示只有一个盘子需要移动,此时直接将该盘子从源柱子移动到目标柱子即可。
当`n`大于1时,我们需要先将`n-1`个盘子从源柱子移动到辅助柱子,然后将第`n`个盘子从源柱子移动到目标柱子,最后再将`n-1`个盘子从辅助柱子移动到目标柱子。
Java练习及参考答案1,编写程序,判断给定的某个年份是否是闰年。
闰年的判断规则如下:(1)若某个年份能被4整除但不能被100整除,则是闰年。
(2)若某个年份能被400整除,则也是闰年。
import java.util.Scanner;class Bissextile{public static void main(String[] arge){System.out.print("请输入年份");int year; //定义输入的年份名字为“year”Scanner scanner = new Scanner(System.in);year = scanner.nextInt();if (year<0||year>3000){System.out.println("年份有误,程序退出!"); System.exit(0);}if ((year%4==0)&&(year%100!=0)||(year%400==0)) System.out.println(year+" is bissextile");elseSystem.out.println(year+" is not bissextile ");}}2,给定一个百分制的分数,输出相应的等级。
90分以上 A级80~89 B级70~79 C级60~69 D级60分以下 E级import java.util.Scanner;class Mark{public static void main(String[] args){System.out.println("请输入一个分数");//定义输入的分数为“mark”,且分数会有小数double mark;Scanner scanner = new Scanner(System.in);mark = scanner.nextDouble();//判断是否有输入错误。
package test;import java.awt.print.*;import java.awt.*;/*实现套打,把套打的格式当成一张图片,将要填入的数据按其在图片在坐标来定位*/ public class PrintTest implements Printable {private String[] value = null;// 所要打印的数据{ "001", "002", "003"};private int[][] position = null;// 每个数据在图片中的坐标{ { 10, 50 }, { 30, 70 }, { 50, 90 }};/*** implements Printable* PageFormat类描述了页面的定位信息、它的尺寸以及每英尺可绘制的区域(单位1/72nd)。
*/public int print(Graphics g, PageFormat pf, int pageIndex) {System.out.println(pageIndex);// 只打一页if (pageIndex > 0) {return Printable.NO_SUCH_PAGE;}Graphics2D g2d = (Graphics2D) g;for (int i = 0; i < value.length; i++) {String str = value[i];int[] temp = position[i];int x = temp[0];int y = temp[1];// 设置打印字体(字体名称、样式和点大小)Font font = new Font("新宋体", Font.PLAIN, 9);g2d.setFont(font); //设置字体g2d.drawString(str, x, y);}return Printable.PAGE_EXISTS;}public static void main(String[] args) {printReport();}public static void printReport() {PrinterJob pj = PrinterJob.getPrinterJob();//创建一个打印任务PageFormat pf = PrinterJob.getPrinterJob().defaultPage();Paper paper = pf.getPaper();// 设置页面高和宽,A4纸为595,842double pageWidth = 595;double pageHeight = 810;paper.setSize(pageWidth, pageHeight);paper.setImageableArea(0, 0, pageWidth, pageHeight);pf.setOrientation(NDSCAPE); //设置打印方向,LANDSCAPE为横向,打印方向默认为纵向pf.setPaper(paper);PrintTest printTest=new PrintTest();printTest.setValue(new String []{"郑品", "", "√"});printTest.setPosition(new int [][]{{ 30, 180 }, { 90,180}, { 150,180 }});pj.setPrintable(printTest, pf);if (pj.printDialog()) { //弹出打印对话框,打印对话框,用户可以通过它改变各种选项,例如:设置打印副本数目,页面方向,或者目标打印机。
java第一次作业题目2021版1. 题目:从键盘上输入两个正整数m和n,求其最大公约数和最小公倍数,必须判断输入数的正确性(比如非正整数等必须提示)。
[选题人数:3] 2. 题目:给出一个月的总天数编写程序,提示用户输入月份和年份,然后显示这个月的天数。
例如,如果用户输入的月份是2而年份是2000,那么程序应显示“2000年2月有29天”。
如果用户输入的月份为3而年份为2021,那么程序就应该显示“2021年3月有31天”。
(提示:必须判断是否是闰年) [选题人数:3]3. 题目:计算一个三角形的周长编写程序,提示用户从键盘输入三角形的三条边,如果输入值合法就计算这个三角形的周长,否则,显示这些输入值不合法(如果任意两条边的和大于第三条边,那么输入值都是合法的)。
[选题人数:3] 4. 题目:奖金发放问题企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?[选题人数:3]5. 题目:打印金字塔形的数字编写一个嵌套的for循环,打印下面的输出。
1 2 1 1 2 4 2 1 1 2 4 8 4 2 1 1 2 4 8 168 4 2 11 2 4 8 16 32 16 8 4 2 11 2 4 8 16 32 64 32 16 8 4 2 11 2 4 8 16 32 64 128 64 32 16 8 4 2 1[选题人数:2] 6. 题目:十进制转换成二进制或十六进制编写程序,从键盘上输入一个十进制整数,然后显示对应的二进制值或十六进制值。
汉诺塔java代码汉诺塔(Hanoi Tower)是经典的递归问题,它涉及到将一组圆盘从一个垂直柱子移动到另一个垂直柱子,中间通过第三个柱子。
这个问题可以通过递归的方式非常优雅地解决。
下面是使用Java编写的汉诺塔问题的代码,代码注释详细解释了每个步骤的含义。
```java/*** 汉诺塔问题的Java实现*/public class HanoiTower {/*** 汉诺塔问题的解决方法** @param n 圆盘的数量* @param from 起始柱子* @param to 目标柱子* @param aux 辅助柱子*/public static void solveHanoi(int n, char from, char to, char aux) {// 如果只有一个圆盘,直接移动到目标柱子if (n == 1) {System.out.println("移动圆盘 1 从柱子 " + from + " 到柱子 " + to);return;}// 将 n-1 个圆盘从起始柱子移动到辅助柱子,目标柱子作为辅助solveHanoi(n - 1, from, aux, to);// 移动第 n 个圆盘到目标柱子System.out.println("移动圆盘 " + n + " 从柱子 " + from + " 到柱子 " + to);// 将 n-1 个圆盘从辅助柱子移动到目标柱子,起始柱子作为辅助solveHanoi(n - 1, aux, to, from);}public static void main(String[] args) {// 圆盘的数量int numberOfDiscs = 3;// 调用解决方法solveHanoi(numberOfDiscs, 'A', 'C', 'B');}}```在这段Java代码中,我们使用了一个递归函数`solveHanoi`来解决汉诺塔问题。
JAVA习题集(含答案)习题一:1. 简述Java的发展过程。
2. 什么是软件?3. 什么叫做源程序?4. 什么叫做编译?5. 什么是Java的byte-codes?它的最大好处是什么?6. 机器语言程序、高级语言程序以及可表示成Java字节码的程序之间的区别是什么?7. Java程序可分为哪两种?分别如何运行?& 试简述J2SE、J2ME与J2EE的简单区别。
9. 练习使用浏览器查看Java API文档。
10. SDK的编译命令是什么?11. 试修改例1-1程序,使其输出的字符串为“I'd like to study Jave”!,并在DOS命令行环境下编译与运行该程序。
习题一参考答案:1. 答:1991: Sun Microsystems公司进军消费电子产品(IA)市场。
1991. 4:Sun成立“ Green”小组,以C++为基础开发新的程序设计语言,并将其命名为Oak。
1992. 10:Green小组升格为First Person公司,他们将Oak的技术转移到Web上,并把Oak改名为Java。
1993~1994: Web在In ternet上开始流行,致使Java得以迅速发展并获得成功。
1995. 5:Sun Microsystems 公司正式发表Java与HotJava 产品。
1995. 10:Netscape与Sun Microsystems 合作,在Netscape Nevigator 中支持Java。
1995. 12:微软(Microsoft )IE加入支持Java的行列。
1996. 2:Java Beta测试版结束,Java 1.0版正式诞生。
1997. 2:Java发展至1.1 版。
Java的第一个开发包JDK (Java Development Kit)发布。
1999. 7:Java升级至1.2版。
2000. 9:Java升级至1.3版。
2001. 7:Java升级至1.4版。
java打印类型的方法以Java打印类型的方法为标题,我们来介绍一下在Java中如何打印不同类型的数据。
在Java中,我们使用System.out.println()方法来打印输出信息。
下面将详细介绍如何打印不同类型的数据。
1. 打印整数类型在Java中,整数类型有byte、short、int和long。
我们可以使用System.out.println()方法来打印这些整数类型的变量。
例如:```javaint num = 10;System.out.println(num);```这样就可以打印出整数变量num的值。
2. 打印浮点数类型在Java中,浮点数类型有float和double。
同样地,我们可以使用System.out.println()方法来打印这些浮点数类型的变量。
例如:```javadouble num = 3.14;System.out.println(num);```这样就可以打印出浮点数变量num的值。
3. 打印字符类型在Java中,字符类型使用char表示。
我们可以使用System.out.println()方法来打印字符类型的变量。
例如:```javachar ch = 'A';System.out.println(ch);```这样就可以打印出字符变量ch的值。
4. 打印布尔类型在Java中,布尔类型使用boolean表示。
同样地,我们可以使用System.out.println()方法来打印布尔类型的变量。
例如:```javaboolean flag = true;System.out.println(flag);```这样就可以打印出布尔变量flag的值。
5. 打印字符串类型在Java中,字符串类型使用String表示。
我们可以使用System.out.println()方法来打印字符串类型的变量。
例如:```javaString str = "Hello World";System.out.println(str);```这样就可以打印出字符串变量str的值。
java递归打印整数实例Java是一种面向对象的编程语言,可以用于开发各种类型的应用程序。
在Java中,递归是一种强大的技术,可以用来解决许多问题,包括打印整数。
递归是一种自我调用的算法,通过不断地调用自身来解决问题。
在打印整数的递归算法中,我们可以将整数分为两部分:整数的最高位和剩余的位数。
首先,我们可以通过递归算法来打印整数的剩余位数,然后再打印整数的最高位。
为了更好地理解递归算法,我们可以通过一个具体的例子来说明。
假设我们要打印整数1234。
首先,我们可以将整数分为两部分:最高位1和剩余的位数234。
然后,我们可以通过递归算法来打印剩余的位数234。
在打印剩余位数234之后,我们再打印最高位1。
通过这种方式,我们可以逐步打印整数的每一位,从而实现整数的递归打印。
在Java中,我们可以使用以下代码实现递归打印整数:```javapublic class RecursivePrint {public static void main(String[] args) {int num = 1234;recursivePrint(num);}public static void recursivePrint(int num) {if (num < 10) {System.out.println(num);} else {int remainder = num % 10;int quotient = num / 10;recursivePrint(quotient);System.out.println(remainder);}}}```在上述代码中,我们首先定义了一个名为`recursivePrint`的方法,该方法接受一个整数作为参数。
如果整数小于10,我们直接打印该整数;否则,我们通过取余操作获取整数的最低位,并通过整除操作获取剩余的位数。
然后,我们递归调用`recursivePrint`方法来打印剩余的位数,并在打印完剩余位数后打印最低位。
PHP中使⽤循环实现的⾦字塔图形今天学习了最基础的PHP条件和循环语句,最后⽼师提了⼏个问题,其中⼀个实现空⼼⾦字塔的图像⽐较好玩。
⽼师要让我们实现的是: * * * * * * 的空⼼⾦字塔。
第⼀种:复制代码代码如下:for ($i=1;$i<=5;$i++){switch ($i){case 1:echo " "."*"." ";break;case 2:echo " ";break;case 3:echo " "."*"." "."*"." ";break;case 4:echo " ";break;case 5:echo "*"." "."*"." "."*";break;}echo "<br>";实现效果就是⽼师要求的图像,不过⽼师觉得应该还有更简单的实现⽅式,可以将空格和*号分开输出;于是就有了第⼆种:复制代码代码如下:for($a=0;$a<4;$a++){for($b=4;$b>$a;$b--){echo " ";}for($c=1;$c<=$a;$c++){echo "*";}for($d=0;$d<=$a;$d++){echo "*";}echo "<br>";}这个实现的效果就没有刚才那种中间空⼼的了,效果如下: * ***************这个还没有实现空⼼,待会再试试,今天第⼀篇博客算完成了,希望以后可以长写。