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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kunsongjack 中级黑马   /  2015-11-18 00:54  /  1235 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到论坛上有人求5阶的魔方矩阵。于是就自己练了下。下面是代码:
所谓魔方矩阵,就是横纵斜的和相同。

  1. /*
  2. * 要求:输出一个五阶魔方
  3. *         17   24   1    8    15               
  4.         23   5    7    14   16
  5.         4    6    13   20   22
  6.         10   12   19   21   3
  7.         11   18   25   2    9
  8. *
  9. */
  10. import java.util.Scanner;

  11. public class Tst {

  12.         public static void main(String[] args) {
  13.                 Scanner sc =new Scanner(System.in);
  14.                
  15.                 while(true){
  16.                         System.out.print("请输入一个大于3的正奇数:");
  17.                         int js = sc.nextInt();
  18.                         if(js>3 && js % 2 ==1){
  19.                                 echoOddMagicMatrix(js);
  20.                         }else{
  21.                                 continue;
  22.                         }
  23.                 }
  24.                
  25.                
  26.         }
  27.        
  28.         //输出奇数维矩阵
  29.         public static void echoOddMagicMatrix(int n){
  30.                 //定义一个五阶的数组矩阵
  31.                 int[][] arr = new int[n][n];
  32.                
  33.                 //定义五阶魔方的起始位置,第一排中间的数为1
  34.                 arr[0][n / 2 ] = 1;
  35.                 int x = 0;                //代表行数
  36.                 int y = n / 2;                 //代表排数
  37.                
  38.                 while(true){
  39.                         //右上移动是否越界了
  40.                         if(x-1 < 0 || y + 1 > n-1){
  41.                                 if(x - 1 < 0 && y + 1 > n - 1){                        //两个都越界了       
  42.                                         int temp = arr[x][y];
  43.                                         x++;
  44.                                         arr[x][y] = temp + 1;
  45.                                         continue;
  46.                                 }else{                                                        //只有一个都越界了               
  47.                                         if(x - 1 < 0){                        //只上越界
  48.                                                 int temp = arr[x][y];
  49.                                                 y++;
  50.                                                 x = n -1;
  51.                                                 arr[x][y]=temp +1;
  52.                                                 continue;
  53.                                         }
  54.                                        
  55.                                         if(y + 1 > n -1){
  56.                                                 int temp = arr[x][y];
  57.                                                 y = 0;
  58.                                                 x--;
  59.                                                 arr[x][y] = temp + 1;
  60.                                         }
  61.                                 }
  62.                         }else{                //没有越界
  63.                                 if(arr[x-1][y+1] == 0){                //右上方没有填充数吗
  64.                                         int temp = arr[x][y];
  65.                                         x--;
  66.                                         y++;
  67.                                         arr[x][y] = temp +1;
  68.                                         continue;
  69.                                        
  70.                                 }else{                        //前方已经填充!
  71.                                        
  72.                                         if(arr[x][y+1] == 0){        //左方没填充
  73.                                                 int temp = arr[x][y];
  74.                                                 x++;
  75.                                                 arr[x][y] = temp +1;
  76.                                                 continue;
  77.                                                
  78.                                         }else{
  79.                                                 break;
  80.                                         }

  81.                                 }
  82.                                
  83.                         }
  84.                        
  85.                 }
  86.                
  87.                 //输出数组
  88.                 for(int[] ab : arr){
  89.                         for(int ac : ab){
  90.                                 System.out.print(ac + "\t");
  91.                         }
  92.                        
  93.                         System.out.println();
  94.                 }
  95.                        
  96.         }


  97. }
复制代码

测试结果为:

  1. 请输入一个大于3的正奇数:5
  2. 17        24        1        8        15       
  3. 23        5        7        14        16       
  4. 4        6        13        20        22       
  5. 10        12        19        21        3       
  6. 11        18        25        2        9       
  7. 请输入一个大于3的正奇数:2
  8. 请输入一个大于3的正奇数:4
  9. 请输入一个大于3的正奇数:7
  10. 30        39        48        1        10        19        28       
  11. 38        47        7        9        18        27        29       
  12. 46        6        8        17        26        35        37       
  13. 5        14        16        25        34        36        45       
  14. 13        15        24        33        42        44        4       
  15. 21        23        32        41        43        3        12       
  16. 22        31        40        49        2        11        20       
  17. 请输入一个大于3的正奇数:9
  18. 47        58        69        80        1        12        23        34        45       
  19. 57        68        79        9        11        22        33        44        46       
  20. 67        78        8        10        21        32        43        54        56       
  21. 77        7        18        20        31        42        53        55        66       
  22. 6        17        19        30        41        52        63        65        76       
  23. 16        27        29        40        51        62        64        75        5       
  24. 26        28        39        50        61        72        74        4        15       
  25. 36        38        49        60        71        73        3        14        25       
  26. 37        48        59        70        81        2        13        24        35       
  27. 请输入一个大于3的正奇数:
复制代码



点评

魔方矩阵是有相同的行数和列数,并在每行每列、对角线上的和都相等。你能构造任何大小(除了2x2)的魔方矩阵。楼主好棒,加个好友方便以后学...  发表于 2015-11-18 01:01

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
洋葱头头 + 1
samge + 1 很给力!

查看全部评分

2 个回复

倒序浏览
看了这么久没看懂。先睡觉吧,还要好好学才能赶上你啊&
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马