Java打印数字金字塔(源码)

合集下载

java习题

java习题
30、编写程序,要求用递归的方法求解表达式1×2+2×3+3×4+4×5+5×6+6×7+7×8+8×9+9×10的值,并将结果按格式1×2+2×3+3×4+4×5+5×6+6×7+7×8+8×9+9×10=330形式输出。
31、编写程序,利用循环控制语句输出如下数字金字塔图形。
老师3:发送第78份试卷
老师2:发送第77份试卷
老师3:发送第76份试卷
... ...
老师2:发送第1份试卷
/link?url=KMFDbF3z7BnHjFarK85i_30HstIyI98rVWRupXOPDP6DhXV-7HD5e8HOhqD3BMRS9lvU31L-lStKQdcgDMExmbp0lecBEgEmcfC1JIngqX_
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
32、编写程序,利用线程模拟一段时间内(3分钟)交通信号灯的运行状况,红灯亮10秒,绿灯亮30秒,黄灯亮3秒。
18、已知,s=1-1/2+1/3-1/4+…+1/(n-1)-1/n,编写程序,求n=100时,s的值。
19、利用面向对象知识,用Java语言编写圆类(Circle)和矩形类(Retangle)继承自形状类(Shape),计算周长和面积,并编写测试类测试完成测试。
20、输入某年某月某日,判断这一天是这一年的第几天。计算方法为:h =(q+[26(m+1)/10]+k+[k/4]+[j/4]+5*j)%7,各变量含义如下:(1)h是一个星期中的每一天(0为星期六;1为星期天;2为星期一;3为星期二;4为星期三;5为星期四;6为星期五)(2)q是某月的某一天(3)m是月份(3为三月,4为四月,...,12为十二月)。一月和二月分别记为上一年的13和14月。(4)j是世纪数(即|year/100|)(5)k是世纪的年数(即year%100)。

java汉诺塔详解及实现代码

java汉诺塔详解及实现代码

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;}// 将实现分为三步,⼀,将源塔底盘上⽅的所有盘⼦移⾄中间塔(递归);⼆,将底盘移到⽬标塔;三,将中间塔上的所有盘⼦移到⽬标塔上(递归)。

数字金字塔

数字金字塔
三、详细设计(1)
主要功能模块1源程序
#include <stdio.h>
#include <stdlib.h>
struct MyNode
{
int num ; //表示数据值
int lay ; //表示该数据在金字塔中的层数
int sort ; //表示该数据在金字塔中的序号
struct MyNode *pNext ; //指向下一个结点
(3)每个数应尽可能放在更下方,即如果可以放在第i层,就不能放在i-1层;
(4)相同层上的数从左向右从小到大排列。每个数按照它在塔中的位置从上到下从左到右从1开始编号,例如数5的序号为4。
设计要求
1.定义一个链表存放数据值及后续结点信息。
2.编写一个函数建立链表。
3.编写一个函数,由用户输入正整数n和3个不大于n的正整数,程序按要求构造的金字塔,并输出3个正整数在数字金字塔中的序号。图8.1中,用户输入6,3,4,5表示有6个数据组成金字塔,要求输出3,4和5在金字塔中的序号。
1.谭浩强著C程序设计(第三版)
2.刘光蓉著.C程序设计实验与教程
3.游浩跃主编C语言程序设计与教程
4.(美)Peter Van Der Linden著.徐波译。《C编程经典之作》
}
ptemp = pHead ; //输出排名
int d,e,f;
while (ptemp != NULL)
{
if (ptemp->num==a ) //将序号赋给其他变量
d=ptemp->sort ;
if (ptemp->num==b )
e=ptemp->sort;
if (ptemp->num==c )

javascript打印完整金字塔型_完整菱形_空心菱形_思路算法详解_js源代码

javascript打印完整金字塔型_完整菱形_空心菱形_思路算法详解_js源代码

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语言来解决二阶梵塔问题。

什么是梵塔问题?梵塔问题是一个古老的数学难题,起源于印度。

该问题的目标是将三个柱子上的一组盘子从一个柱子移动到另一个柱子,每次只能移动一个盘子,并且大盘子不能放在小盘子上面。

这个问题也被称为汉诺塔问题。

二阶梵塔问题在二阶梵塔问题中,我们只有两个柱子和三个盘子。

我们需要将这三个盘子从第一个柱子移动到第二个柱子。

同样地,每次只能移动一个盘子,并且大盘子不能放在小盘子上面。

解决方案为了解决这个问题,我们可以使用递归算法。

具体地说,我们可以将整个过程分为三步:- 将前两个盘子从第一个柱子移动到第三个柱子。

- 将最后一个盘子从第一个柱子移动到第二个柱子。

- 将前两个盘子从第三个柱子移动到第二个柱子。

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实现

汉诺塔代码java实现

汉诺塔代码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练习及参考答案

Java练习及参考答案

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();//判断是否有输入错误。

java打印套打功能源码

java打印套打功能源码

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()) { //弹出打印对话框,打印对话框,用户可以通过它改变各种选项,例如:设置打印副本数目,页面方向,或者目标打印机。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档