Java 中的魔方2024年9月10日 | 阅读 6 分钟 幻方是一个由数字组成的方格。一个 m 阶幻方包含从 1 到 m2(包括 1 和 m2)的数字,使得每一行、每一列以及每一条对角线上的数字之和都相等。如果我们将这个和表示为 M,那么 M 完全取决于 m。在数学上,M 的值为: M = m(m2 + 1) / 2。 因此, 对于 m = 3, M = 3 x (32+ 1) / 2 = (3 x (9 + 1)) / 2 = (3 x 10) / 2 = 15 对于 m = 5, M = 5 x (52+ 1) / 2 = (5 x (25 + 1)) / 2 = (5 x 26) / 2 = 130 / 2 = 65 对于 m= 7, M = 7 x (72+ 1) / 2 = (7 x (49 + 1)) / 2 = (7 x 50) / 2 = 175 对于 m= 9, M = 9 x (92+ 1) / 2 = (9 x (81 + 1)) / 2 = (9 x 82) / 2 = 369 让我们看几个幻方的例子。 对于 m = 9,我们有一个 9x9 的幻方,其中每一行、每一列以及每一条对角线上的数字之和都为 369。 对于 m = 11,我们有一个 11x11 的幻方,其中每一行、每一列以及每一条对角线上的数字之和都为 671。 填充幻方的规则让我们讨论一些想法,这将有助于我们编写填充幻方的规则。我们确定无疑的一点是,从 1 到 m2 的每个数字都会出现在幻方中。我们将数字 1 放置在位置 (m / 2, m - 1),然后从那里开始,我们将每一行和每一列视为循环的,因此会进行环绕。 规则 1: 在任何位置,下一个数字的位置都是通过将前一个数字的行号减 1 并将前一个数字的列号加 1 来计算的。在任何时候,如果计算出的行位置变为 -1,那么它将环绕到 m - 1。同样,如果计算出的列位置变为 m,那么它将环绕到 0。 规则 2: 如果在计算出的位置,幻方中已经存在一个数字,那么将计算出的列位置减 2,并将计算出的行位置加 1。 规则 3: 如果计算出的行位置为 -1 且计算出的列位置为 m,那么新位置将是:(0, m - 2)。 让我们举一个例子来更好地理解。 276 951 438 上面的方阵是 3 阶的,包含 9 个元素。 数字 1 的位置是 (3 / 2, 3 - 1) = (1, 2) 数字 2 的位置是 (1 - 1, 2 + 1) = (0, 3) = (0, 0) [3 环绕到 0] 数字 3 的位置是 (0 - 1, 0 + 1) = (-1, 1) = (3 - 1, 1) = (2, 1) [-1 环绕到 3 - 1 = 2] 数字 4 的位置是 (2 - 1, 1 + 1) = (1, 2)。但是,(1, 2) 的位置已经被数字 1 占用了。因此,应用规则 2,我们得到 (1 + 1, 2 - 2) = (2, 0)。 数字 5 的位置是 (2 - 1, 0 + 1) = (1, 1) 数字 6 的位置是 (1 - 1, 1 + 1) = (0, 2) 数字 7 的位置是 ( 0 - 1, 2 + 1) = (-1, 3) = (0, 3 - 2) = (0, 1) [这里应用了规则 3] 数字 8 的位置是 ( 0 - 1, 1 + 1) = (-1, 2) = (3 - 1, 2) = (2, 2) [-1 环绕到 3 - 1 = 2] 数字 9 的位置是 ( 2 - 1, 2 + 1) = (1, 3) = (1, 0) [3 环绕到 0] 实施基于以上示例,编写了以下代码。 文件名: MagicSquare.java 输出 The Magic Square for 11: Sum of each column or row 671: 54 42 30 18 6 115 103 91 79 67 66 41 29 17 5 114 102 90 78 77 65 53 28 16 4 113 101 89 88 76 64 52 40 15 3 112 100 99 87 75 63 51 39 27 2 111 110 98 86 74 62 50 38 26 14 121 109 97 85 73 61 49 37 25 13 1 108 96 84 72 60 48 36 24 12 11 120 95 83 71 59 47 35 23 22 10 119 107 82 70 58 46 34 33 21 9 118 106 94 69 57 45 44 32 20 8 117 105 93 81 56 55 43 31 19 7 116 104 92 80 68 时间复杂度: 上述程序的平均时间复杂度为 O(n2),其中 n 是方阵中的总行数或列数。 空间复杂度: 上述程序的平均空间复杂度为 O(n2),其中 n 是方阵中的总行数或列数。 |
IP 地址是分配给连接到网络的设备的唯一标识符。这些地址确保设备能够相互通信。在本节中,我们将讨论如何使用 Java 验证 IP 地址。IP 地址分为两种类型。...
5 分钟阅读
在软件开发世界中,不变性概念因其在创建更可预测和健壮的代码方面的作用而受到广泛关注。不可变对象是那些在创建后其状态无法更改的对象,这提供了线程安全、调试简化等好处...
阅读 3 分钟
数组也是 Java 和许多其他语言中最基本、最简单、最易用的数据结构之一。它们有助于开发人员在单个连续的内存块中存储相同类型的多个值。因此,这使得访问和...
阅读 6 分钟
字体是任何图形用户界面中的基本方面,Java 提供了强大的支持来处理和显示字体。无论我们是使用 Swing 开发桌面应用程序,还是使用 JavaFX 开发 Web 应用程序,理解如何使用字体对于创建视觉上...
阅读9分钟
什么是?Spark是一个Java微框架,允许您快速创建Java 8 Web应用程序。Spark是一个轻量级且简单的Java Web框架,专为快速开发而设计。它受到了流行的Ruby微框架Sinatra的启发。Spark大量使用了……
阅读 8 分钟
在 Java 中,所有参数都是按值传递的。但是,我们可以通过修改可变对象、使用包装器类或使用数组或集合等引用来模拟按引用传递的行为。这些方法允许在方法内间接修改原始数据,从而在遵循...的同时模拟按引用传递的功能。
7 分钟阅读
Java 中的 Set 是一个唯一元素的集合,而 Stream 有效地执行过滤、映射和减少数据等功能任务。将 Set 转换为 Stream 允许使用 Java 8 中引入的 Stream API 轻松处理其元素……
阅读 3 分钟
() 和 Line() 之间的区别 在 Java 中,java.util 包中提供的 Scanner 类是获取 int、double 和字符串等原始数据类型输入的最简单方法之一。在竞技编程中,时间是一个限制因素,使用 Scanner 类是...
阅读 4 分钟
Java 的 'instanceof' 运算符用于测试一个对象是否是指定类型(类、子类或接口)的实例。Java 中的 'instanceof' 也被称为类型比较运算符,因为它比较实例与类型。它返回 true...
阅读 6 分钟
在本节中,我们创建了几个 Java 程序来检查给定数字是否为完全平方数。完全平方数或平方数是整数的平方的正整数。换句话说,当我们乘以两个相同的数字时……
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India