1 魔方阵概念

2填充的,每一行、每一列、对角线之和均相等的方阵,阶数n = 3,4,5…。魔方阵也称为幻方阵。

例如三阶魔方阵为:

魔方阵有什么的规律呢?

魔方阵分为奇幻方和偶幻方。而偶幻方又分为是4的倍数(如4,8,12……)和不是4的倍数(如6,10,14……)两种。下面分别进行介绍。

2 奇魔方的算法

2.1 奇魔方的规律与算法

奇魔方(阶数n = 2 * m + 1,m =1,2,3……)规律如下:

数字1位于方阵中的第一行中间一列;

数字a(1 < a  ≤ n2)所在行数比a-1行数少1,若a-1的行数为1,则a的行数为n;

数字a(1 < a  ≤ n2)所在列数比a-1列数大1,若a-1的列数为n,则a的列数为1;

如果a-1是n的倍数,则a(1 < a  ≤ n2)的行数比a-1行数大1,列数与a-1相同。

2.2 奇魔方算法的C语言实现

1 #include

2 //Author:http://furzoom.com/

3 //N为魔方阶数

4 #define N 11

5

6 intmain()7 {8 inta[N][N];9 inti;10 intcol,row;11

12 col = (N-1)/2;13 row = 0;14

15 a[row][col] = 1;16

17 for(i = 2; i <= N*N; i++)18 {19 if((i-1)%N == 0)20 {21 row++;22 }23 else

24 {25 //if row = 0, then row = N-1, or row = row - 1

26 row--;27 row = (row+N)%N;28

29 //if col = N, then col = 0, or col = col + 1

30 col ++;31 col %=N;32 }33 a[row][col] =i;34 }35 for(row = 0;row

3 偶魔方的算法

偶魔方的情况比较特殊,分为阶数n = 4 * m(m =1,2,3……)的情况和阶数n = 4 * m + 2(m = 1,2,3……)情况两种。

3.1 阶数n = 4 * m(m =1,2,3……)的魔方(双偶魔方)

算法1:阶数n = 4 * m(m =1,2,3……)的偶魔方的规律如下:

按数字从小到大,即1,2,3……n2顺序对魔方阵从左到右,从上到下进行填充;

将魔方中间n/2列的元素上、下进行翻转;

将魔方中间n/2行的元素左、右进行翻转。

C语言实现

1 #include

2 //Author:http://furzoom.com/

3 //N为魔方阶数,

4 #define N 12

5

6 intmain()7 {8 int a[N][N];//存储魔方

9 int i, temp;//临时变量

10 int col, row;//col 列,row 行11

12 //初始化

13 i = 1;14 for(row = 0;row < N; row++)15 {16 for(col = 0;col < N; col ++)17 {18 a[row][col] =i;19 i++;20 }21 }22

23 //翻转中间列

24 for(row = 0; row < N/2; row ++)25 {26 for(col = N/4;col < N/4*3;col ++)27 {28 temp =a[row][col];29 a[row][col] = a[N-row-1][col];30 a[N-row-1][col] =temp;31 }32 }33

34 //翻转中间行

35 for(col = 0; col < N/2; col ++)36 {37 for(row = N/4;row < N/4 * 3;row ++)38 {39 temp =a[row][col];40 a[row][col] = a[row][N-col-1];41 a[row][N-col-1] =temp;42 }43 }44

45 for(row = 0;row < N; row++)46 {47 for(col = 0;col < N; col ++)48 {49 printf("%5d",a[row][col]);50 }51 printf("\n");52 }53 return 0;54 }

算法2:阶数n = 4 * m(m =1,2,3……)的偶魔方的规律如下:

按数字从小到大,即1,2,3……n2顺序对魔方阵从左到右,从上到下进行填充;

将魔方阵分成若干个4×4子方阵,将子方阵对角线上的元素取出;

将取出的元素按从大到小的顺序依次填充到n×n方阵的空缺处。

C语言实现

1 #include

2 //Author:http://furzoom.com/

3 //N为魔方阶数

4 #define N 12

5

6 intmain()7 {8 int a[N][N];//存储魔方

9 int temparray[N*N/2];//存储取出的元素

10 int i;//循环变量

11 int col, row;//col 列,row 行12

13 //初始化

14 i = 1;15 for(row = 0;row < N; row++)16 {17 for(col = 0;col < N; col ++)18 {19 a[row][col] =i;20 i++;21 }22 }23 //取出子方阵中对角线上的元素,且恰好按从小到大的顺序排放

24 i = 0;25 for(row = 0;row < N; row++)26 {27 for(col = 0;col < N; col ++)28 {29 if((col % 4 == row % 4) || ( 3 == ( col % 4 + row % 4)))30 {31 temparray[i] =a[row][col];32 i++;33 }34 }35 }36 //将取出的元素按照从大到小的顺序填充到n×n方阵中

37 i = N*N/2 -1;38 for(row = 0;row < N; row++)39 {40 for(col = 0;col < N; col ++)41 {42 if((col % 4 == row % 4) || ( 3 == ( col % 4 + row % 4)))43 {44 a[row][col] =temparray[i];45 i--;46 }47 }48 }49 //输出方阵

50 for(row = 0;row < N; row++)51 {52 for(col = 0;col < N; col ++)53 {54 printf("%5d",a[row][col]);55 }56 printf("\n");57 }58 return 0;59 }

3.2 阶数n = 4 * m + 2(m =1,2,3……)的魔方(单偶魔方)

算法

设k = 2 * m + 1;单偶魔方是魔方中比较复杂的一个。

将魔方分成A、B、C、D四个k阶方阵,如下图这四个方阵都为奇方阵,利用上面讲到的方法依次将A、D、B、C填充为奇魔方。

交换A、C魔方元素,对魔方的中间行,交换从中间列向右的m列各对应元素;对其他行,交换从左向右m列各对应元素。

交换B、D魔方元素,交换从中间列向左m – 1列各对应元素。

C语言实现

#include

//Author:http://furzoom.com/

//N为魔方阶数

#define N 10

intmain()

{int a[N][N] = { {0} };//存储魔方

inti,k,temp;int col,row;//col 列,row 行//初始化

k = N / 2;

col= (k-1)/2;

row= 0;

a[row][col]= 1;//生成奇魔方A

for(i = 2; i <= k*k; i++)

{if((i-1)%k == 0 )//前一个数是3的倍数

{

row++;

}else{//if row = 0, then row = N-1, or row = row - 1

row--;

row= (row+k)%k;//if col = N, then col = 0, or col = col + 1

col ++;

col%=k;

}

a[row][col]=i;

}//根据A生成B、C、D魔方

for(row = 0;row < k; row++)

{for(col = 0;col < k; col ++)

{

a[row+k][col+k] = a[row][col] + k*k;

a[row][col+k] = a[row][col] + 2*k*k;

a[row+k][col] = a[row][col] + 3*k*k;

}

}//Swap A and C

for(row = 0;row < k;row++)

{if(row == k / 2)//中间行,交换从中间列向右的m列,N = 2*(2m+1)

{for(col = k / 2; col < k - 1; col++)

{

temp=a[row][col];

a[row][col]= a[row +k][col];

a[row+ k][col] =temp;

}

}else//其他行,交换从左向右m列,N = 2*(2m+1)

{for(col = 0;col < k / 2;col++)

{

temp=a[row][col];

a[row][col]= a[row +k][col];

a[row+ k][col] =temp;

}

}

}//Swap B and D

for(row = 0; row < k;row++)//交换中间列向左m-1列,N = 2*(2m+1)

{for(i = 0;i < (k - 1)/2 - 1;i++)

{

temp= a[row][k+ k/2 -i];

a[row][k+ k /2 -i] = a[row + k][k+k/2 -i];

a[row+ k][k+k/2 -i] =temp;

}

}//输出魔方阵

for(row = 0;row < N; row++)

{for(col = 0;col < N; col ++)

{

printf("%5d",a[row][col]);

}

printf("\n");

}return 0;

}

==========================================》

你若要放弃,那我就可以安慰自己了,因为这样我不再孤独了,可以参考

判断魔方阵c语言程序设计_魔方阵算法及C语言实现相关推荐

  1. 5阶魔方阵c语言程序设计,五阶魔方阵源代码c语言课到程设计.docx

    五阶魔方阵源代码c语言课到程设计 主函数 #include #include #include # include "wenjian.c" # include "sanj ...

  2. 5阶魔方阵c语言程序设计,五阶魔方阵源代码c语言时课程设计.docx

    五阶魔方阵源代码c语言时课程设计 主函数 #include #include #include # include "wenjian.c" # include "sanj ...

  3. 电大java语言程序设计_国家开放大学电大Java语言程序设计形考任务1答案

    标准答案1:JDK 标准答案2:字节码 标准答案3:Android 标准答案4:javac.exe 标准答案5:num_green 标准答案6:num_blue 标准答案7:错误,变量声明错误 标准答 ...

  4. 最简单的python语言程序设计_编程中最简单的语言Python,这样学或许更容易

    最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...

  5. c语言判断s1是否大于s2,C语言程序设计_复习资料一.doc

    C语言程序设计_复习资料一 -- <程序设计基础> 院(系) 班级 学号 姓名 试卷卷面成绩占课程考核成绩 %平时 成绩占 %课程考核成绩题号一二三四五六七八九十小计得分 得 分一.单项选 ...

  6. c语言开发题库管理系统,c语言程序设计_题库管理系统.doc

    c语言程序设计_题库管理系统 程序设计基础课程设计报告 班 级: 计算机科学与技术1103班 姓 名: 杨广宇 指导教师: 胡宏涛 完成日期: 2012年9月6日 (题目) 1. 设计题目与要求 (简 ...

  7. c语言中,x-y,'105',ab,7f8那个是正确的,C语言程序设计_第三章 数据.ppt

    C语言程序设计_第三章 数据 * 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型 学习运算符应注意 * 基本算术运算符: + - * / % 结合方向: ...

  8. c语言编程杭电1008,C语言程序设计_杭州电子科技大学cyy1_3

    <C语言程序设计_杭州电子科技大学cyy1_3>由会员分享,可在线阅读,更多相关<C语言程序设计_杭州电子科技大学cyy1_3(8页珍藏版)>请在人人文库网上搜索. 1.1,可 ...

  9. 【C语言程序设计进阶-浙大翁恺】C语言笔记 文件

    [C语言程序设计进阶-浙大翁恺]C语言笔记 文件 文件 格式化输入输出 文件输入输出 二进制文件 位运算 按位运算 移位运算 位运算例子 位段 文件 格式化输入输出 %-nd:数字左对齐,且输出要占n ...

最新文章

  1. [新手必看] 17个常见的Python运行时错误
  2. 89岁屠呦呦再次震惊世界!视频介绍疟疾、青蒿素和背后的故事
  3. CR--同事分享学习
  4. Vivado各个过程产生的文件与ISE的对比
  5. python中的os abort_Python os.abort()用法及代码示例
  6. 【五线谱】音高表示 ( 低音谱号 | C1 36 音符音高表示 | C2 48 音符音高表示 | C3 60 音符音高表示 )
  7. String 堆内存和栈内存
  8. 马来西亚国立大学的计算机,要拿到马来西亚国立大学的 offer难吗?
  9. arcgis公里坐标转经纬度_高德api交通态势爬取及可视化利用 python+arcgis
  10. 人工智能对医疗和健康产业的冲击和革命——体外克隆
  11. d3中文案例_D3.js柱状图例子
  12. 前端学习(1980)vue之电商管理系统电商系统之实现文本框和按钮的切换
  13. python将excel日期比大小_sql与excel、python比较(二)——日期和时间函数
  14. Linux内核驱动调试,Linux内核设备驱动之内核的调试技术笔记整理
  15. jquery常用技巧及常用方法列表
  16. 南丁格尔邮票图片大全_【鉴赏】武夷山普通纪念币鉴赏(高清图片)
  17. 应届生比老员工更吃香?为什么大厂都在抢应届生
  18. 无线桥接后无法访问服务器,无线桥接后不能登录副路由器ip地址的解决方法
  19. 使用anysdk打包android渠道
  20. Python办公自动化之Word文档自动化:全网最全,看这一篇就够了!

热门文章

  1. 【C语言】博客之旅从学习C语言开始
  2. idea配置翻译插件(google翻译插件)
  3. 计算机网络各层设备及功能讲解大汇总~
  4. postman获取返回值及tests[]用法
  5. 随机读写 vs 顺序读写
  6. 解决克隆虚拟机后无法上网问题(亲测有效)
  7. Unity学习shader笔记[一百]简单焦散Caustic效果
  8. SVD 与 LSI教程(5):LSI关键字研究与协同理论
  9. 谁浇了李彦宏一瓶冷水?
  10. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现