c语言奇数阶幻方构造法,构造奇数3(2m+1)阶完美幻方的方法

第 卷第 期 年 月

海 南 师范 大学 学报 (自然 科学 版 ) ()

构造奇数 ()阶完美幻方的方法

詹 森, 王辉丰

(广东技术师范学院 计算机科学系,广东 广州 ;

海 南师 范大 学 数 学 与统计 学 院 ,海 南 海 口 )

摘 要 :根据有 关文献和两个幻方的加法 ,完整地解决 了构造奇数 ()(,,…为 自

然数 )阶完美幻方(包括对称完美幻方)的方法及其证 明并完整地解决 了构造奇数 (,

,… 为 自然数 )阶 完美幻 方 (包括 对 称 完 美幻方 )的 问题

关键词 :奇数阶 ;完美幻方;对称 完美幻方 ;余函数 ;基方阵;转置方阵;六步法

中 图分 类 号 :

文献标 识 码 :

文章 编 号 :()

()

’, (,,,;

,,, )

:,, ()(,,… )( ), () :;;;;; :

文 【】指 出 ,构 造 奇 数 ()(,,… 为 自然数 )阶完美幻方一直是一一个未解决 的问题 ,文】 解决了构造 阶(当时)完美幻方或对称完美幻 方 的 问题 要 彻 底 解决 这个 问题 比构 造 其 他 奇 数 阶 幻方一直是更艰难的一个 问题文解决了构造 ()(为 ,,,,…的 自然数 )阶完 美 幻 方 或对 称 完美 幻 方 的 问题 ,对 于解 决 上 述 的难 题 前进 了一 大 步然 而 ,对 于 ,即 。() (,,… )时还 是 没 有解 决 由于 可 表示 为 扣( ),()( ),(,,,… ; ,,,,… 为 自然 数 ),可见 ,首 先 要 对 构 造 阶完美幻方进行讨论如下

构 造 (,,…为 自然 数 )阶 完 美 幻 方 的步骤

第一步 把 分为 个基 组 ,每组有 个数 (称为基数 ),其 和均为 这是很易办到 的,例如如 下 的基 组 :

(,,),(,,),(,,);

(,,),(,,),(,,); ()

(,,),(,,),(,,)

是 一种 选择

当(后,为 自然数)时 ,把 个基组 的各个

基 数 分别 加 以();,,… (,,…为 自

然数 ),共得 大组 ,每个大组有 个小组 ,每个小组

个基数笫个大组 ,其每个小组 个基数和均为

(一)

第二 步 构 造基 行 ,基 行 和基 行

从 每一 个 大组 任 取一 个 小 组 ,个 大 组共 取 出

“个小组 。个基数 ,随意置于基行 从左到右的第

(卜)(卢,,…为 自然数 )个位 置 ,这 个基

数 的和 为

, 一

【(一)扣(。一);

从每一个大组剩下 的小组 中任取一个小组 ,

个大组共取出 个小组 个基数 ,随意置于基行

收稿 日期:

海南师 范 大学学 报 (自然科 学版 )

从左到右的第() ,,…为自然数)个位

置 ,这 扣个基数的和为

()一十(一。一);

从 每 一个 大 组 剩下 的小组 中任 取一 个 小组 ,扣。

个 大组 共取 出 扣。个 小 组 扣个 基 数 ,随意 置于 基行

从左到右的第 ),,…为 自然数)个位 置 ,这 个基数的和为

()一专(一。一)

至此 得 基行 这 样 继

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C语言实现N幻方的代码: ```c #include <stdio.h> #include <stdlib.h> int main() { int n, i, j, num; printf("请输入N幻方数(奇数):"); scanf("%d", &n); int magic_square[n][n]; // 初始化幻方 for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { magic_square[i][j] = 0; } } // 放置1的位置 i = 0; j = n / 2; magic_square[i][j] = 1; // 放置2到n*n的数 for (num = 2; num <= n * n; num++) { i--; j++; if (i < 0 && j >= n) { i += 2; j--; } else if (i < 0) { i = n - 1; } else if (j >= n) { j = 0; } if (magic_square[i][j] != 0) { i += 2; j--; } magic_square[i][j] = num; } // 输出幻方 printf("%d幻方:\n", n); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%-5d", magic_square[i][j]); } printf("\n"); } // 检查行、列、对角线的和是否相等 int sum = 0; for (i = 0; i < n; i++) { sum += magic_square[0][i]; } // 检查行 for (i = 1; i < n; i++) { int row_sum = 0; for (j = 0; j < n; j++) { row_sum += magic_square[i][j]; } if (row_sum != sum) { printf("该方阵不是幻方!\n"); return 0; } } // 检查列 for (j = 0; j < n; j++) { int col_sum = 0; for (i = 0; i < n; i++) { col_sum += magic_square[i][j]; } if (col_sum != sum) { printf("该方阵不是幻方!\n"); return 0; } } // 检查主对角线 int diag_sum = 0; for (i = 0; i < n; i++) { diag_sum += magic_square[i][i]; } if (diag_sum != sum) { printf("该方阵不是幻方!\n"); return 0; } // 检查副对角线 diag_sum = 0; for (i = 0; i < n; i++) { diag_sum += magic_square[i][n - 1 - i]; } if (diag_sum != sum) { printf("该方阵不是幻方!\n"); return 0; } printf("该方阵是幻方!\n"); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值