黑马程序员技术交流社区

标题: 求思路, 求想法 [打印本页]

作者: pandaeuler    时间: 2013-11-13 21:11
标题: 求思路, 求想法
本帖最后由 pandaeuler 于 2013-11-13 21:16 编辑

魔幻方阵。有一种方阵被称为“魔幻方阵”。所谓魔幻方阵是指在n*n的矩阵中填写1-n²这n²个数字,使得它的每一行、每一列以及两个对角线之和均相等。例如三阶魔幻方阵如下:
8 1 6
3 5 7 
4 9 2
编程,打印出一种三阶魔幻方阵。

作者: ysunday    时间: 2013-11-13 21:49
本帖最后由 ysunday 于 2013-11-13 21:56 编辑

这有个网址
http://www.cnblogs.com/faib/archive/2007/02/28/659789.html
奇阶魔方阵 N=2*M+1(M=1,2,3,……)
布阵规律为:
  a、把1放在N*N方阵中的第一行中间一列,即放在位置为(1,(N+1)/2);   
  b、后一个数存放的行数比前一个数存放的行数减1,若这个行数为0,则取行数为N;   
  c、后一个数存放的列数比前一个数存放的列数加1,若这个列数为N+1,则取列数为1;   
  d、如果前一个数是N的倍数,则后一个数存放的列数不变,而行数加1。

我只是把代码搬过来 没细研究, 稍微改了改代码,你慢慢看肯定能懂
  1. class magic
  2.   {

  3.   public static void main(string[] args)
  4.   {
  5.   //奇阶魔方阵
  6.       int n = 3;
  7.       int[][] magicd = new int[n][n];
  8.       int x = 0, y = (n + 1) / 2 - 1;
  9.      for(int i = 1; i <= n * n; i++){
  10.          magicd[x][y] = i;
  11.          if(i % n == 0){
  12.                x++;
  13.          }
  14.          else{
  15.                x--;
  16.                y++;
  17.          }
  18.          if(x < 0){
  19.                x = n - 1;
  20.           }else if(x > n - 1){
  21.                x = 0;
  22.           }
  23.           if(y < 0){
  24.               y = n - 1;
  25.           }else if(y > n - 1){
  26.               y = 0;
  27.           }
  28.      }
  29.      for(int i = 0; i < n; i++){
  30.             for(int j = 0; j < n; j++){
  31.                    System.out.println(magicd[i][j] + "\t");
  32.      }
  33.       System.out.println();
  34. }
  35. }
复制代码

作者: ysunday    时间: 2013-11-13 22:13
或者这个网址http://zhidao.baidu.com/question/216979271.html
作者: pandaeuler    时间: 2013-11-13 22:20
ysunday 发表于 2013-11-13 21:49
这有个网址
http://www.cnblogs.com/faib/archive/2007/02/28/659789.html
奇阶魔方阵 N=2*M+1(M=1,2,3 ...

那这个规律是怎么得到的?
作者: ysunday    时间: 2013-11-13 22:25
本帖最后由 ysunday 于 2013-11-13 22:57 编辑
pandaeuler 发表于 2013-11-13 22:20
那这个规律是怎么得到的?
                                                            

作者: pandaeuler    时间: 2013-11-13 22:28
ysunday 发表于 2013-11-13 22:25
问这个你就有点难为我了,这是个算法,搞算法的会这个

照着规律打出来, 做这道题就没有意义了...
作者: 轩辕迪卡    时间: 2013-11-14 20:24
穷举法一定可解,不过那样我想就没啥技术含量了吧?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2