魔方阵的定义:在n*n的方阵中,每一行的和=每一列的和=对角线的和。(本文中涉及的n为大于3的奇数)。

例如3*3的魔方阵为:

5*5的魔方阵为:

如何写魔方阵呢?

1.数字1位于第一行的正中间
2.下一个数放到上一个数的右上角(即上一行下一列),若无上一行则放到最后一行,若无下一列则放到第一列
3.若新位置已经放了数,则将其放入该数的正下方(即下一行的同一列)

b站讲解视频:https://www.bilibili.com/video/BV1HU4y1f7AD?spm_id_from=333.788.top_right_bar_window_dynamic.content.click

C语言代码:

  1. 1 int magicMatrix() {
  2. 2 printf("请输入你想生成的魔方阵阶数:(大于3的奇数)\n");
  3. 3 int i,c,r;
  4. 4 scanf("%d",&i);
  5. 5 int arr[i][i];
  6. 6 for(int n=0; n<i; n++) {
  7. 7 for(int m=0; m<i; m++) {
  8. 8 arr[n][m]=0;
  9. 9 }
  10. 10 }
  11. 11 c=0;
  12. 12 r=i/2;
  13. 13 arr[c][r] = 1;// 魔方阵的第一行最中间的数为1
  14. 14 int k=i*i;
  15. 15 for(int j=2; j<=k; j++) {
  16. 16 int h=c,l=r; //记录原来的位置
  17. 17 if(c==0) {
  18. 18 c=i-1;
  19. 19 } else {
  20. 20 c=c-1;
  21. 21 }
  22. 22 if(r==i-1) {
  23. 23 r=0;
  24. 24 } else {
  25. 25 r=r+1;
  26. 26 }
  27. 27 if(arr[c][r]!=0) {
  28. 28 c=h+1;
  29. 29 r=l;
  30. 30 }
  31. 31 printf("c=%d,r=%d,j=%d\n",c,r,j);
  32. 32 arr[c][r]=j;
  33. 33 }
  34. 34 printf("\n");
  35. 35 for(int n=0; n<i; n++) {
  36. 36 for(int m=0; m<i; m++) {
  37. 37 printf("%d\t",arr[n][m]);
  38. 38 }
  39. 39 printf("\n");
  40. 40 }
  41. 41 }

计算下一个数字的位置时,如果位置已经被占,就在该数的下一行同一列,所以代码中每次计算要记录该数的位置。

运行结果为:

代码没有做错误输入验证,朋友们可以自行加上。

C语言---魔方阵的更多相关文章

  1. 基于visual Studio2013解决C语言竞赛题之0523魔方阵

     题目

  2. C语言复习---输出魔方阵

    一:奇魔方阵 算法: 1.第一个元素放在第一行中间一列 .下一个元素存放在当前元素的上一行.下一列. .如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下 ...

  3. SDUST 作业10 Problem D 魔方阵

    Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等.如三阶魔方阵: 8 1 6 3 5 7 4 9 2     魔方阵的规律如下: ...

  4. Project 3:N级魔方阵

    魔方阵:由n*n个数字所组成的n阶方阵,具有各对角线,各横列与纵行的数字和都相等的性质,称为魔方阵.而这个相等的和称为魔术数字.若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵. 目标:输入一 ...

  5. 牛客网 牛客小白月赛2 A.数字方阵-反魔方阵,梁邱构造法

    天坑未补... 水一波博客,再不写博客就咸成鱼干了,只写题不写题解,过一段时间就忘了自己学过什么了. 最近重点就是把开学以来写的题补出来,没学的就滚去学会啊(= =),填一下坑... 从这篇博客开始, ...

  6. Python旋转魔方阵

    [问题描述]输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在左上角,呈顺时针方向依次放置各元素. N=3时:    1    2    3    8   ...

  7. c语言求方阵的行列式、伴随矩阵算法

    #include<stdio.h> #include<math.h> #define N 100 //N比输入的阶数大即可 int main() {   int n,a[N][ ...

  8. C++奇数魔方阵

    理解了算法的思想就很简单了, 首先将1放到第一排的中间,然后向左上角走,当行数超过索引,则将该数放到最后一排接下来的一列中去,当列数超过索引,则放到上一排的第一列中去,若都没有超过索引,但是此时的右上 ...

  9. 【4N魔方阵】

    /* 4N魔方阵 */ #include<stdio.h> #include<stdlib.h> #define N 8 int main(void){ int i, j; ] ...

随机推荐

  1. [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow"

    [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow" 目录 [翻译] TensorFlow ...

  2. git命令新建远程分支并推送,切换远程地址

    最近记性不好,老是忘记操作命令,记录下一下新建远程分支和切换.删除远程地址的命令: 1.查看当前分支:  git branch 2.查看所有分支:git branch -a 3.切换分支:git ch ...

  3. WOE(weight of evidence, 证据权重)

    1. WOE(weight of evidence, 证据权重) WOE是一种衡量正常样本( Good)和违约样本( Bad)分布的差异方法 WOE=ln(Distr Good/Distr Bad)例 ...

  4. 关于 Linux Polkit 权限提升漏洞(CVE-2021-4034)的修复方法

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 近日,国外安全团队披露了 Polkit 中的 pkexec 组件存在的本地权限提升漏洞(CVE-2021-4034),Polkit 默认安装在各个主 ...

  5. Azure DevOps (五) 推送流水线制品到流水线仓库

    上一篇我们成功创建了我们的第一条流水线,并且配置了阿里云的maven加速,这篇文章我们来研究一下如何把编译好的代码上传到azure的流水线制品仓库中 为后续我们进行发布做准备 首先打开我们上一次编辑的 ...

  6. 一个简单的用户态赋值语句,cpu都做了哪些操作

    如int a = 0;这样一个赋值语句,cpu做了哪些操作.

  7. Java Study day3

    Day 2 遗留问题: cmd javac编译和 java执行 程序输出Hello World 遗留问题解答: 首先使用Txt记事本写一个后缀为.java的HelloWorld.java程序,直接复制 ...

  8. 关于IIS站点最大并发量分析

    关于IIS站点最大并发量分析,会有如下这个疑问:IIS站点最大并发量是多少? 一般为:   IIS站点最大并发量=队列长度+进程数量[即最大工作进程数] 通过这个公式,可以基本评估出一个IIS站点的最 ...

  9. 题解0002:Best Cow Fences

    题目描述:给定一个长度为n的正整数序列A.求一个平均数最大的,长度不小于L的子序列,输出这个平均数*1000. 题目链接:http://ybt.ssoier.cn:8088/problem_show. ...

  10. loj6271 「长乐集训 2017 Day10」生成树求和 加强版(矩阵树定理,循环卷积)

    loj6271 「长乐集训 2017 Day10」生成树求和 加强版(矩阵树定理,循环卷积) loj 题解时间 首先想到先分开三进制下每一位,然后每一位分别求结果为0,1,2的树的个数. 然后考虑矩阵 ...