黑马程序员技术交流社区
标题:
奇数阶的魔方矩阵
[打印本页]
作者:
kunsongjack
时间:
2015-11-18 00:54
标题:
奇数阶的魔方矩阵
看到论坛上有人求5阶的魔方矩阵。于是就自己练了下。下面是代码:
所谓魔方矩阵,就是横纵斜的和相同。
/*
* 要求:输出一个五阶魔方
* 17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
*
*/
import java.util.Scanner;
public class Tst {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while(true){
System.out.print("请输入一个大于3的正奇数:");
int js = sc.nextInt();
if(js>3 && js % 2 ==1){
echoOddMagicMatrix(js);
}else{
continue;
}
}
}
//输出奇数维矩阵
public static void echoOddMagicMatrix(int n){
//定义一个五阶的数组矩阵
int[][] arr = new int[n][n];
//定义五阶魔方的起始位置,第一排中间的数为1
arr[0][n / 2 ] = 1;
int x = 0; //代表行数
int y = n / 2; //代表排数
while(true){
//右上移动是否越界了
if(x-1 < 0 || y + 1 > n-1){
if(x - 1 < 0 && y + 1 > n - 1){ //两个都越界了
int temp = arr[x][y];
x++;
arr[x][y] = temp + 1;
continue;
}else{ //只有一个都越界了
if(x - 1 < 0){ //只上越界
int temp = arr[x][y];
y++;
x = n -1;
arr[x][y]=temp +1;
continue;
}
if(y + 1 > n -1){
int temp = arr[x][y];
y = 0;
x--;
arr[x][y] = temp + 1;
}
}
}else{ //没有越界
if(arr[x-1][y+1] == 0){ //右上方没有填充数吗
int temp = arr[x][y];
x--;
y++;
arr[x][y] = temp +1;
continue;
}else{ //前方已经填充!
if(arr[x][y+1] == 0){ //左方没填充
int temp = arr[x][y];
x++;
arr[x][y] = temp +1;
continue;
}else{
break;
}
}
}
}
//输出数组
for(int[] ab : arr){
for(int ac : ab){
System.out.print(ac + "\t");
}
System.out.println();
}
}
}
复制代码
测试结果为:
请输入一个大于3的正奇数:5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
请输入一个大于3的正奇数:2
请输入一个大于3的正奇数:4
请输入一个大于3的正奇数:7
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20
请输入一个大于3的正奇数:9
47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35
请输入一个大于3的正奇数:
复制代码
作者:
samge
时间:
2015-11-18 01:17
看了这么久没看懂。先睡觉吧,还要好好学才能赶上你啊&
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2