Chinaunix首页 | 论坛 | 博客
  • 博客访问: 165189
  • 博文数量: 56
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 593
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-18 09:59
文章分类

全部博文(56)

文章存档

2019年(1)

2018年(26)

2016年(1)

2015年(6)

2014年(22)

我的朋友

分类: Java

2014-03-25 22:56:55

说明
将1到n(为奇数)的数字排列在nxn的方阵上,且各行、各列与各对角线的和必须相同,如下所
示:

解法
填魔术方阵的方法以奇数最为简单,第一个数字放在第一行第一列的正中央,然后向右(左)上
填,如果右(左)上已有数字,则向下填,如下图所示:

一般程式语言的阵列索引多由0开始,为了计算方便,我们利用索引1到n的部份,而在计算是向
右(左)上或向下时,我们可以将索引值除以n值,如果得到余数为1就向下,否则就往右(左)上,
原理很简单,看看是不是已经在同一列上绕一圈就对了。


点击(此处)折叠或打开

  1. /**
  2.  * @author:      吴永行
  3.  * @dateTime:     2014-3-25 下午9:18:57
  4.  * @description:     
  5.  *
  6.  */
  7. package 经典算法大全;

  8. public class _49_奇数魔方阵 {

  9.     /**
  10.      * @author:      吴永行
  11.      * @dateTime:     2014-3-25 下午9:18:57
  12.      * @description:     
  13.      * @param args
  14.      *
  15.      */
  16.     static final int N = 5;

  17.     public static void main(String[] args) {
  18.         int i, j, key;
  19.         int square[][] = new int[N + 1][N + 1];
  20.         i = 0;
  21.         j = (N + 1) / 2;
  22.         for (key = 1; key <= N * N; key++) {
  23.             if ((key % N) == 1)
  24.                 i++;
  25.             else {
  26.                 i--;
  27.                 j++;
  28.             }
  29.             if (i == 0)
  30.                 i = N;
  31.             if (j > N)
  32.                 j = 1;
  33.             square[i][j] = key;
  34.         }
  35.         for (i = 1; i <= N; i++) {
  36.             for (j = 1; j <= N; j++)
  37.                 System.out.format("%2d ", square[i][j]);
  38.             System.out.println();
  39.         }
  40.     }

  41. }


阅读(933) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~