现在还不清楚是谁首先提出了一个魔方。很久以前有一个关于中国大洪水的故事。人们担心他们会被冲走,并试图通过献祭安抚河神。直到一个孩子注意到一只海龟背上有一个魔方,它一直在绕着祭品转,一切似乎都不起作用。广场告诉人们,为了拯救自己,他们需要付出多大的牺牲。从那时起,魔方就成了任何有洞察力的乌龟的时尚之巅。
级别:初学者
重点:逻辑、数组、方法
如果您以前从未遇到过幻方,幻方是一种顺序数字在一个正方形中的排列,这样行、列和对角线加起来都是相同的数字。例如,3x3幻方是:
8 1 6 3 5 7 4 9 2每一行、每一列和每一对角线加起来是15。
此编程练习涉及创建奇数大小的幻方(即,正方形的大小只能是奇数、3x3、5x5、7x7、9x9等)。制作这样一个正方形的诀窍是将数字1放在第一行和中间列。要找到放置下一个数字的位置,请向右对角向上移动(即,向上一行,向上一列)。如果这样的移动意味着您从正方形上掉下来,请绕到另一侧的行或列。最后,如果移动将您带到已填充的正方形,请返回原始正方形并向下移动1。重复此过程,直到所有方块都填满。
例如,一个3x3的幻方会这样开始:
0 1 0 0 0 0 0 0 0对角线向上移动意味着我们绕到正方形的底部:
0 1 0 0 0 0 0 0 2同样,下一个对角线向上移动意味着我们绕到第一列:
0 1 0 3 0 0 0 0 2现在,对角线向上移动会产生一个已经填充的正方形,因此我们回到原来的位置,放下一行:
0 1 0 3 0 0 4 0 2它一直持续,直到所有的方块都满了。
问题是,您的程序能否创建一个5x5的幻方,如下图所示?
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9提示:除了这个练习的编程方面,它也是一个逻辑测试。依次执行创建幻方的每一步,并了解如何使用二维数组来完成。
您的程序应该能够创建下面的5x5幻方:
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9以下是我的版本:
import java.util.Scanner; public class MagicOddSquare { public static void main(String[] args) { Scanner input = new Scanner(System.in); int[][] magicSquare; boolean isAcceptableNumber = false; int size = -1; //only accept odd numbers while (isAcceptableNumber == false) { System.out.println("Enter in size of square: "); String sizeText = input.nextLine(); size = Integer.parseInt(sizeText); if (size % 2 == 0) { System.out.println("The size must be an odd number"); isAcceptableNumber = false; } else { isAcceptableNumber = true; } } magicSquare = createOddSquare(size); displaySquare(magicSquare); } private static int[][] createOddSquare(int size) { int[][] magicSq = new int[size][size]; int row = 0; int column = size/2; int lastRow = row; int lastColumn = column; int matrixSize = size*size; magicSq[row][column]= 1; for (int k=2;k < matrixSize+1;k++) { //check if we need to wrap to opposite row if (row - 1 < 0) { row = size-1; } else { row--; } //check if we need to wrap to opposite column if (column + 1 == size) { column = 0; } else { column++; } //if this position isn't empty then go back to where we //started and move one row down if (magicSq[row][column] == 0) { magicSq[row][column] = k; } else { row = lastRow; column = lastColumn; if (row + 1 == size) { row=0; } else { row++; } magicSq[row][column] = k; } lastRow = row; lastColumn= column; } return magicSq; } private static void displaySquare(int[][] magicSq) { int magicConstant = 0; for (int j=0;j<(magicSq.length);j++) { for (int k=0;k<(magicSq[j].length);k++) { System.out.print(magicSq[j][k] + " "); } System.out.print; magicConstant = magicConstant + magicSq[j][0]; } System.out.print("The magic constant is " + magicConstant); } }关键区别——java中的包装类与原语类型 Java是一种流行的编程语言,用于开发各种应用程序。Java的一个优点是它支持面向对象编程(OOP)。使用OOP,可以使用对象对程序或软件进行建模。类被用作创建对象的蓝图。有必要在...
... 给电子表格中的每一行着色的最佳方法是使用Excel中的表格功能。如果将条目格式化为表格,则可以使用内置的颜色格式模板。 ...
...含一些占位符文本。在我们选择的现成标题中,高级属性中的文档标题***到我们的标题中。您可以保留占位符文本或用自己的文本替换它。 请注意,文档主体中的文本是灰色的。编辑页眉或页脚时,不能编辑文档正文中的文本...
...一个常见的做法是从一页开始每一个新的章节。使用Word中的部分很容易做到这一点。 我们将向您展示如何在节的开头为新的奇数页添加新的分节符。如果您的文档中已经有部分,不要担心。我们还将向您展示如何将当前分节符...
...交易委员会(sec)公布的统计数据,每笔交易不到100股的奇数交易正创下历史新高。2019年10月的初步统计显示,奇数交易占总交易的比例接近市场的一半。现在,大多数在线经纪商已将其标准股票佣金降至零,并允许进行零星股...
...法是使用字节流和字符流。 覆盖的关键领域 1.什么是Java中的字节流–定义,功能2.什么是Java中的字符流–定义,功能3.Java中字节流和字符流的区别是什么–关键区别的比较 关键术语 字节流、字符流、Java 什么是java中的字节流(...
...对象以多种方式运行。 面向对象编程(OOP)是软件开发中的一种常见编程范式。它有助于使用对象对现实世界场景进行建模。Java是一种支持OOP的编程语言。类是蓝图,它有助于创建对象。类具有属性和行为。属性也称为属性,...
...而BufferedReader从另一个读取器读取字符。 Java是软件开发中的一种现代编程语言。它允许面向对象编程,并提供自动垃圾收集器、支持多线程等功能。开发人员将Java用于独立、web、移动和许多其他应用程序。此外,还可以使用Java...
...据类型定义在该内存位置存储值时要分配的内存量。 Java中的一个主要数据类型是原始数据类型;这些是Java中可用的基本数据类型int'是其中之一。int变量的默认值是0。此外,它在存储数据时分配4个字节。 下面是一个例子。 Figu...
...它被称为多线程应用程序。 覆盖的关键领域 1.什么是Java中的单线程-定义,功能2.什么是Java中的多线程-定义,功能3.Java中单线程和多线程的区别-主要区别比较 关键术语 Java,单线程,多线程,进程 什么是java中的单线程(single th...