需求  

  要求输出1~n²的自然数构成的魔方阵。

STEP 1 什么是魔方阵?

  魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n2的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。

STEP 2 魔方阵的规律是什么?

  此处先写简单一点的奇阶魔方阵,偶数阶的算法更复杂,暂不讨论。

  奇阶魔方阵的排列方法:

  ⑴将1放在第一行中间一列;

  ⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1;

  ⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);

  ⑷当上一个数的列数为n时,下一个数的列数应为1,行数减去1;

  ⑸如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。

STEP 3 编程思路

  ⑴构造一个n阶魔方阵雏形,即n*n的动态二维数组;

  ⑵编写函数实现魔方阵的排列算法;

  ⑶调用函数输出魔方阵。

STEP 4 要点整理

  malloc函数:分配内存空间给动态数组(使用后需在函数最后用free语句释放所占用的内存)

  memset函数:给数组的所有元素赋初值

-----------------------------------------华丽丽的分割线---------------------------------代码君要出场了-----------------------------------

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void f(int x);
  6.  
  7. int main()
  8. {
  9. int x;
  10.  
  11. scanf("%d", &x);
  12. f(x);
  13.  
  14. return ;
  15. }
  16.  
  17. void f(int x)
  18. {
  19. int i, m, n;
  20. int **mf;
  21.  
  22. mf = (int **)malloc(sizeof(int *) * x); //定义动态二维数组mf
  23.  
  24. for(i = ; i < x; i++)
  25. {
  26. mf[i] = (int *)malloc(sizeof(int) * x);
  27. memset(mf[i], , sizeof(int) * x); //初始化,将二维数组mf所有元素赋值为0
  28. }
  29.  
  30. m = ;
  31. n = x / ;
  32. mf[m][n] = ;
  33.  
  34. for(i = ; i <= x * x; i++)
  35. {
  36. m--;
  37. n++;
  38.  
  39. if(m < ) //如果是在第一行,行数变为最后一行,列数加1
  40. {
  41. m = x - ;
  42. }
  43.  
  44. if(n > x - ) //如果是在最后一列,行数减1,列数为第1行
  45. {
  46. n = ;
  47. }
  48.  
  49. if(mf[m][n] != ) //如果后续的数所处位置已有数,则行数加1,列数不变
  50. m++;
  51.  
  52. mf[m][n] = i;
  53. }
  54.  
  55. for(m = ; m < x; m++)
  56. {
  57. for(n = ; n < x; n++)
  58. {
  59. printf("%5d", mf[m][n]);
  60. }
  61.  
  62. printf("\n");
  63. }
  64.  
  65. for(i = ; i < x; i++) //释放占用的内存
  66. {
  67. free(mf[i]);
  68. mf[i] = ;
  69. }
  70.  
  71. free(mf);
  72. mf = ;
  73. }

欢迎转载,请备注原始连接http://www.cnblogs.com/liuliuliu/p/3753952.html,并注明转载。

作者bibibi_liuliu,联系方式395985239@qq.com

n阶魔方阵(奇数阵)的输出的更多相关文章

  1. 任意阶魔方阵(幻方)的算法及C语言实现

    写于2012.10: 本来这是谭浩强那本<C程序设计(第四版)>的一道课后习题,刚开始做得时候去网上找最优的算法,结果发现奇数和双偶数(4的倍数)的情况下算法都比较简单,但是单偶数(2的倍 ...

  2. 【C++小白成长撸】--N阶幻方(魔阵)矩阵

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

  3. HDU 1998 奇数阶魔方【模拟填数/注意边界和细节】

    奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. 算法:九宫格问题--奇数阶魔方(Magic-Square)

    一.魔方介绍 魔方(这里是简称,也可以叫幻方.魔术矩阵,Magic Square)是 n×n 正方形网格(n 为每侧的单元数),里面每个单元格填充了不同的正整数 1, 2, 3, ... , n2,并 ...

  5. 【C++小白成长撸】--(续)单偶数N阶魔方矩阵

    1 /*程序的版权和版本声明部分: **Copyright(c) 2016,电子科技大学本科生 **All rights reserved. **文件名:单偶数N阶魔方矩阵 **程序作用:单偶数N阶魔 ...

  6. JavaScript语言里判断一个整数是偶数还是奇数,并输出判断结果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。

    python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明. 重难点:通过input函数输入的行消息为字符串格式,必须转换为整型,否则 ...

  8. python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数。如果其中没有奇数,就输出一个消息进行说明。

    python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数.如果其中没有奇数,就输出一个消息进行说明. 笔者是只使用条件语句实行的.(if-else) 重难点:先把三个数进行由小到大的 ...

  9. 杭电ACM 1998奇数阶魔方

    #include<stdio.h>#include <string.h>int main(){ int n,m; int a[40][40]={0}; scanf(" ...

随机推荐

  1. Hbase1.0伪分布式集群启动失败问题

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7340681.html 转载请注明出处 最近抽空折腾自己的虚拟机环境时启动伪分布式Hbase集群一直失败, ...

  2. $python用装饰器实现一个计时器

    直接上代码: import time from functools import wraps # 定义装饰器 def fn_timer(function): @wraps(function) def ...

  3. javascript 设置元素滚动大小

    3. 滚动大小 最后要介绍的是滚动大小(scroll dimension),指的是包含滚动内容的元素的大小. 有些元素(例如 元素),即使没有执行任何代码也能自动地添加滚动条:但另外一些元素,则需要通 ...

  4. iOS 自动订阅开发

    一.代码逻辑 关于iOS 订阅.自动订阅 本身功能开发很简单.跟正常的购买没什么大的差异.唯一需要特殊处理(自动订阅)的是, 在APP启动时候要增加侦听: [[SKPaymentQueue defau ...

  5. PHP开发之环境配置

    nignx //start nginx -s reload //restart composer create-project laravel/laravel learnlaravel5 //自动创建 ...

  6. 【Beginning Python】抽象(未完)

    [懒惰即是美德] 抽象意味着良好的可读性:说明你在努力做什么,而不是给出你正在如何做的细节. [抽象和结构] 程序应该是非常抽象的,就像“下载网页.计算频率.打印每个单词的频率”一样易懂.翻译成程序就 ...

  7. 关于MVC打印问题,打印指定的内容

    首先你的内容一定要放在一个div中如下代码 <div id="divprint"> <table class="table table-striped ...

  8. 20145335《java程序设计》第10周学习总结

    20145335郝昊 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的 ...

  9. Apache ab 测试结果的分析

    以前安装好APACHE总是不知道该如何测试APACHE的性能,现在总算找到一个测试工具了.就是APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下.格式: ...

  10. linxu 安装rabbitMQ

    转载自:http://blog.csdn.net/mooreliu/article/details/44645807 首先使EPEL(http://fedoraproject.org/wiki/EPE ...