java中的奇数幻方

现在还不清楚是谁首先提出了一个魔方。很久以前有一个关于中国大洪水的故事。人们担心他们会被冲走,并试图通过献祭安抚河神。直到一个孩子注意到一只海龟背上有一个魔方,它一直在绕着祭品转,一切似乎都不起作用。广场告诉人们,为了拯救自己,他们需要付出多大的牺牲。从那时起,魔方就成了任何有洞察力的乌龟的时尚之巅。...

现在还不清楚是谁首先提出了一个魔方。很久以前有一个关于中国大洪水的故事。人们担心他们会被冲走,并试图通过献祭安抚河神。直到一个孩子注意到一只海龟背上有一个魔方,它一直在绕着祭品转,一切似乎都不起作用。广场告诉人们,为了拯救自己,他们需要付出多大的牺牲。从那时起,魔方就成了任何有洞察力的乌龟的时尚之巅。

man working at computer man working at computer

级别:初学者

重点:逻辑、数组、方法

奇幻方

如果您以前从未遇到过幻方,幻方是一种顺序数字在一个正方形中的排列,这样行、列和对角线加起来都是相同的数字。例如,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); } }

  • 发表于 2021-10-21 00:17
  • 阅读 ( 335 )
  • 分类:编程

你可能感兴趣的文章

包装类(wrapper class)和java中的基元类型(primitive type in java)的区别

关键区别——java中的包装类与原语类型 Java是一种流行的编程语言,用于开发各种应用程序。Java的一个优点是它支持面向对象编程(OOP)。使用OOP,可以使用对象对程序或软件进行建模。类被用作创建对象的蓝图。有必要在...

  • 发布于 2020-10-19 06:27
  • 阅读 ( 734 )

如何突出显示excel中的每一行

... 给电子表格中的每一行着色的最佳方法是使用Excel中的表格功能。如果将条目格式化为表格,则可以使用内置的颜色格式模板。 ...

  • 发布于 2021-03-28 12:44
  • 阅读 ( 361 )

如何向word文档添加页眉或页脚

...含一些占位符文本。在我们选择的现成标题中,高级属性中的文档标题***到我们的标题中。您可以保留占位符文本或用自己的文本替换它。 请注意,文档主体中的文本是灰色的。编辑页眉或页脚时,不能编辑文档正文中的文本...

  • 发布于 2021-04-10 11:52
  • 阅读 ( 172 )

如何在word2013中的奇数页码上新建一节

...一个常见的做法是从一页开始每一个新的章节。使用Word中的部分很容易做到这一点。 我们将向您展示如何在节的开头为新的奇数页添加新的分节符。如果您的文档中已经有部分,不要担心。我们还将向您展示如何将当前分节符...

  • 发布于 2021-04-11 08:17
  • 阅读 ( 165 )

奇数交易在上升

...交易委员会(sec)公布的统计数据,每笔交易不到100股的奇数交易正创下历史新高。2019年10月的初步统计显示,奇数交易占总交易的比例接近市场的一半。现在,大多数在线经纪商已将其标准股票佣金降至零,并允许进行零星股...

  • 发布于 2021-06-20 01:40
  • 阅读 ( 201 )

字节流(byte stream)和java中的字符流(character stream in java)的区别

...法是使用字节流和字符流。 覆盖的关键领域 1.什么是Java中的字节流–定义,功能2.什么是Java中的字符流–定义,功能3.Java中字节流和字符流的区别是什么–关键区别的比较 关键术语 字节流、字符流、Java 什么是java中的字节流(...

  • 发布于 2021-07-01 09:22
  • 阅读 ( 702 )

继承(inheritance)和java中的多态性(polymorphism in java)的区别

...对象以多种方式运行。 面向对象编程(OOP)是软件开发中的一种常见编程范式。它有助于使用对象对现实世界场景进行建模。Java是一种支持OOP的编程语言。类是蓝图,它有助于创建对象。类具有属性和行为。属性也称为属性,...

  • 发布于 2021-07-01 09:50
  • 阅读 ( 417 )

文件读取器(filereader)和java中的bufferedreader(bufferedreader in java)的区别

...而BufferedReader从另一个读取器读取字符。 Java是软件开发中的一种现代编程语言。它允许面向对象编程,并提供自动垃圾收集器、支持多线程等功能。开发人员将Java用于独立、web、移动和许多其他应用程序。此外,还可以使用Java...

  • 发布于 2021-07-01 12:28
  • 阅读 ( 259 )

内景(int)和java中的整数(integer in java)的区别

...据类型定义在该内存位置存储值时要分配的内存量。 Java中的一个主要数据类型是原始数据类型;这些是Java中可用的基本数据类型int'是其中之一。int变量的默认值是0。此外,它在存储数据时分配4个字节。 下面是一个例子。 Figu...

  • 发布于 2021-07-01 12:32
  • 阅读 ( 265 )

单线程(single thread)和java中的多线程(multi thread in java)的区别

...它被称为多线程应用程序。 覆盖的关键领域 1.什么是Java中的单线程-定义,功能2.什么是Java中的多线程-定义,功能3.Java中单线程和多线程的区别-主要区别比较 关键术语 Java,单线程,多线程,进程 什么是java中的单线程(single th...

  • 发布于 2021-07-01 14:09
  • 阅读 ( 559 )
二仁酱
二仁酱

0 篇文章

相关推荐