文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言魔方阵的实现方法有哪些

2023-06-21 23:42

关注

这篇文章主要介绍C语言魔方阵的实现方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

魔方阵:

把1到n*n排成n行n列方阵,使方阵中的每一行、每一列以及对角线上的数之和都相同,即为n阶魔方阵。

根据魔方阵的规律,我将它分为三种情况。

1.奇数阶魔方阵 

规律:第一个数放在第一行的中间,下一个数放在上一个数的上一行下一列,若该位置已经有了数字即放在上个数的下面一行的相同列

用C语言编程如下:

示例:n=5;

#include<stdio.h>#include<stdlib.h>#include<assert.h> 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;}

结果:

C语言魔方阵的实现方法有哪些

2.偶数阶魔方阵 (n=4K)

规律:按数字从小到大,即1,2,3……n顺序对魔方阵从左到右,从上到下进行填充;
将魔方阵分成若干个4×4子方阵(如:8阶魔方阵可分成四个4×4子方阵),将子方阵对角线上的元素取出;将取出的元素按从大到小的顺序依次填充到n×n方阵的空缺处。

#include<stdio.h>#include<stdlib.h>#include<assert.h>//偶数魔方阵 4K void Magic2(){#define ROW 8#define COL ROWint 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;}

结果: 

C语言魔方阵的实现方法有哪些

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<stdio.h>#include<assert.h>#include<stdlib.h> void Magic3(){#define ROW 10 #define COL ROWassert(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语言魔方阵的实现方法有哪些

以上是“C语言魔方阵的实现方法有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯