A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pandaeuler 中级黑马   /  2013-11-13 21:11  /  1361 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 pandaeuler 于 2013-11-13 21:16 编辑

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

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
本帖最后由 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
或者这个网址http://zhidao.baidu.com/question/216979271.html
回复 使用道具 举报
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:57 编辑
pandaeuler 发表于 2013-11-13 22:20
那这个规律是怎么得到的?
                                                            
回复 使用道具 举报
ysunday 发表于 2013-11-13 22:25
问这个你就有点难为我了,这是个算法,搞算法的会这个

照着规律打出来, 做这道题就没有意义了...
回复 使用道具 举报
穷举法一定可解,不过那样我想就没啥技术含量了吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马