C语言魔方阵的实现方法有哪些
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要介绍C语言魔方阵的实现方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!魔方阵:把1到n*n排成n行n列方阵,使方阵中的每一行、每一列以及对角线上的数之和都相
千家信息网最后更新 2025年02月23日C语言魔方阵的实现方法有哪些
这篇文章主要介绍C语言魔方阵的实现方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
魔方阵:
把1到n*n排成n行n列方阵,使方阵中的每一行、每一列以及对角线上的数之和都相同,即为n阶魔方阵。
根据魔方阵的规律,我将它分为三种情况。
1.奇数阶魔方阵
规律:第一个数放在第一行的中间,下一个数放在上一个数的上一行下一列,若该位置已经有了数字即放在上个数的下面一行的相同列
用C语言编程如下:
示例:n=5;
#include#include #include void Magic1(){#define ROW 5#define COL ROWassert(ROW % 2 != 0); //判断n是否为奇数 int arr[ROW][COL] = { 0 }; //定义二维数组 int currow = 0;int curcol = COL / 2;arr[currow][curcol] = 1;for (int i = 2; i <= ROW * COL; i++) { if (arr[(currow - 1 + ROW) % ROW][(curcol + 1) % COL] == 0) //按照规律赋值 { currow = (currow - 1 + ROW) % ROW; curcol = (curcol + 1) % COL; } else { currow = (currow + 1) % ROW; } arr[currow][curcol] = i;} for (int i = 0; i < ROW; i++) //打印魔方阵{ for (int j = 0; j < COL; j++) { printf("%-3d", arr[i][j]); } printf("\n");} }int main(){ Magic1(); return 0;}
结果:
2.偶数阶魔方阵 (n=4K)
规律:按数字从小到大,即1,2,3……n顺序对魔方阵从左到右,从上到下进行填充;
将魔方阵分成若干个4×4子方阵(如:8阶魔方阵可分成四个4×4子方阵),将子方阵对角线上的元素取出;将取出的元素按从大到小的顺序依次填充到n×n方阵的空缺处。
#include#include #include //偶数魔方阵 4K void Magic2(){#define ROW 8#define COL ROW int tmp = 1; int arr[ROW][COL] = { 0 }; //定义二维矩阵 for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { arr[i][j] = tmp++; } } int row1 = 1; int col1 = 1; int row2 = 1; int col2 = 1; for (int i = 0; i < (ROW / 4) ; i++) { for (int j = 0; j < (COL / 4); j++) { row1 = 4 * i; col1 = 4 * j; row2 = 4 * i; col2 = 4 * j + 3; for (int k = 0; k < 4; k++) { arr[row1][col1] = (ROW * COL + 1) - arr[row1][col1]; arr[row2][col2] = (ROW * COL + 1) - arr[row2][col2]; row1++; col1++; row2++; col2--; } } } for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { printf("%-3d", arr[i][j]); } printf("\n"); } }int main(){ Magic2(); return 0;}
结果:
3.偶数阶魔方阵 (n=4K+2)
规律:
3.1.填充规则
将魔方分成A、B、C、D四个k阶奇方阵, 利用奇数魔方阵填充方法依次将A、D、B、C填充 。
3.2.交换规则 上下标记的数字进行交换
1.右半边大于k+2的列(从1开始)
2.左半边,上下两个块最中心的点进行交换
3.左半边小于中心列的列(除了上下半边最中心的行的第一列的那个值不用交换)(从1开始)
#include#include #include void Magic3(){#define ROW 10 #define COL ROW assert(ROW % 2 == 0 && ROW % 4 != 0); int arr[ROW][COL] = { 0 }; //左上角 int currow = 0; int curcol = ROW/4; arr[currow][curcol] = 1; int tmp = 0; for (int i = 2; i <= ROW * COL/ 4; i++) { if (arr[(currow - 1 + ROW / 2) % (ROW / 2)][(curcol + 1) % (COL / 2)] == 0) //判断上一行下一列是否被赋值 { currow = (currow - 1 + ROW / 2) % (ROW / 2); curcol = (curcol + 1) % (COL / 2); } else { currow = (currow + 1) % (ROW / 2); } arr[currow][curcol] = i; } //右下角 currow = ROW / 2; for (int i = 0; i < ROW / 2; i++, currow++) { curcol = COL / 2; for (int j = 0; j < COL / 2; j++, curcol++) { arr[currow][curcol] = arr[i][j] + 9; } } //右上角 currow = 0; for (int i = ROW/2; i < ROW ; i++, currow++) { curcol = COL / 2; for (int j = COL/2; j < COL; j++, curcol++) { arr[currow][curcol] = arr[i][j] + 9; } } //左下角 currow = ROW / 2; for (int i = 0; i < ROW/2; i++, currow++) { curcol = 0; for (int j = COL/2; j < COL; j++, curcol++) { arr[currow][curcol] = arr[i][j] + 9; } } //替换规则1:右半边 大于k+2的列 进行上下交换 for (int i = 0; i < ROW / 2; i++) { for (int j = ROW / 2 + ROW / 4 + 2; j < COL; j++) { tmp = arr[i][j]; arr[i][j] = arr[i + ROW / 2][j]; arr[i + ROW / 2][j] = tmp; } } //替换规则2:交换左半边,两个中心节点 currow = ROW / 4; curcol = COL / 4; tmp = arr[currow][curcol]; arr[currow][curcol] = arr[currow + ROW / 2][curcol]; arr[currow + ROW / 2][curcol] = tmp; //替换规则3:左半边,除(K+1,1)这个点外,小于k+1的列 上下交换 for (int j = 0; j < ROW / 4; j++) //表示交换的列 { for (int i = 0; i < ROW / 2; i++) //表示交换的行 { if (i == ROW / 4 && j == 0) { continue; } else { tmp = arr[i][j]; arr[i][j] = arr[i + ROW / 2][j]; arr[i + ROW / 2][j] = tmp; } } } //打印 for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { printf("%-3d", arr[i][j]); } printf("\n"); }} int main(){ Magic3(); return 0;}
结果:
以上是"C语言魔方阵的实现方法有哪些"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
方阵
半边
j++
一行
上下
规则
规律
个数
方法
语言
偶数
奇数
数字
结果
相同
两个
元素
内容
对角
对角线
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
一般数据库地址
网站服务器数据会备份吗
登录邮箱显示无法连接到服务器
手机谷歌商店怎么切换服务器
网络安全产品产品有哪些
怎么查本地服务器ip
计算机三级网络技术自学难吗
新加坡加拿大网络安全吗
珠海嘻哈网络技术服务
数据库动态脱敏技术路线
网络安全电子屏内容照片
mysql建立数据库
c 中对数据库选取一列
万方数据库怎么出检索报告
免费网络安全培训资料
软件开发前端是做什么的
网络技术战争手段
白银公安局网络安全保卫大队
dayz服务器选项怎么关
浅析计算机网络安全管理
图数据库最新版
数据库服务器重启监听
云卡联互联网科技有限公司
用指令做一个2b2t服务器
互联网科技特色
全国中学生网络安全大赛视频
及时应对突发的网络安全事件
质量网络安全隐私保护试题
军队网络安全防范视频
越陌网络技术有限公司