C 语言幻方函数

2024 年 8 月 28 日 | 阅读 6 分钟

在本文中,我们将讨论 C 语言中的幻方函数及其示例。

n 阶幻方是将 n² 个数字(通常是不同的整数)排列在一个正方形中,使得该正方形的对角线、行中的 n 个数字的总和为一个固定值。幻方包含从 1 到 n² 的整数

幻数,或幻和 M,是每个行、列和对角线中恒定的总和。典型幻方的幻数,仅取决于 n,其值为

M = n(n²+1)/2

让我们考虑阶数 n = 6, 7, 8, ... 的普通幻方

对于这些阶数,幻数大约为:372, 509, 660, 825, ...

第一个整数 1 位于任何幻方(n/2, n-1) 位置。设坐标为(i,j)。下一个数字按顺序放置在(i-1, j+1) 位置,其中每个都可以看作是循环数组,因为它们会环绕。

满足三个要求

后续数字的位置是通过将前一个数字的行号1,并将前一个数字的列号1来确定的。如果估计的行位置变为负数,它将始终环绕到n-1。如果计算出的列位置增加到 n,它也将环绕到

示例

步骤:

  • 数字 1 的位置 = (4/2, 4-1) = (2, 3)
  • 数字 2 的位置 = (2-1, 3+1) = (1, 4)
  • 数字 3 的位置 = (1-1, 4+1) = (0, 5)
  • 数字 4 的位置 = (0-1, 5+1) = (-1, 6)
  • 新位置 = (0, 6-4) = (0, 2)
  • 数字 5 的位置 = (0-1, 2+1) = (-1, 3)
  • 新位置 = (0, 3-2) = (0, 1)
  • 数字 6 的位置 = (0-1, 1+1) = (-1, 2)
  • 新位置 = (0, 2-2) = (0, 0)
  • 数字 7 的位置 = (0-1, 0+1) = (-1, 1)
  • 新位置 = (0, 1-2) = (0, -1)
  • 新位置 = (1, -1+4) = (1, 3)
  • 数字 8 的位置 = (1-1, 3+1) = (0, 4)
  • 数字 9 的位置 = (0-1, 4+1) = (-1, 5)
  • 新位置 = (0, 5-4) = (0, 1)
  • 数字 10 的位置 = (0-1, 1+1) = (-1, 2)
  • 新位置 = (0, 2-2) = (0, 0)
  • 数字 11 的位置 = (0-1, 0+1) = (-1, 1)
  • 新位置 = (0, 1-2) = (0, -1)
  • 新位置 = (1, -1+4) = (1, 3)
  • 数字 12 的位置 = (1-1, 3+1) = (0, 4)
  • 数字 13 的位置 = (0-1, 4+1) = (-1, 5)
  • 新位置 = (0, 5-4) = (0, 1)
  • 数字 14 的位置 = (0-1, 1+1) = (-1, 2)
  • 新位置 = (0, 2-2) = (0, 0)
  • 数字 15 的位置 = (0-1, 0+1) = (-1, 1)
  • 新位置 = (0, 1-2) = (0, -1)
  • 新位置 = (1, -1+4) = (1, 3)
  • 数字 16 的位置 = (1-1, 3+1) = (0, 4)

示例

让我们看一个程序来理解 C 语言中幻方函数的用法。

输出

The Magic Square for n=5:
Sum of each row or column 65:

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

复杂度

时间复杂度:O(n²)

辅助空间:O(n²)

注意:此方法仅适用于 n 为奇数的情况。仅对 n 的奇数有效

说明

  • 棋盘的最后一个单元格的中间单元格开始。
  • 放入数字 1
  • 移动到右上角的单元格。
  • 如果它不在棋盘边界内,则使用模 n
  • 使用模运算后,移动到下一个单元格。
  • 一旦达到 n 的倍数,就移动到左侧单元格
  • 如果它不在棋盘边界内,则使用模 n
  • 放入下一个数字,然后重复此过程。

示例

让我们再看一个程序来理解 C 语言中幻方函数的用法。

输出

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

结论

总之,幻方是独特的数字排列,具有沿所有行、列对角线具有相等总和的特殊属性。纵观历史,它们一直吸引着数学家、艺术家社会。幻方在数学与艺术、文化意义和加密等领域的丰富融合,展现了数学的魅力和适应性,为探索和创造提供了丰富的课题。