日期:2014-05-20 浏览次数:21027 次
/**
* “蛇形矩阵” 计算及打印
* @author SageZk
* @version 1.0
*/
public class Sp {
public static void main(String[] args) {
//方阵计算
final int LEN = 69; //元素个数
final int SIDE = (int) Math.ceil(Math.sqrt(LEN));
final int[][] M = new int[SIDE][SIDE];
for (int i = 1, r = 0, c = 0, flag = 'c'; i <= LEN;) {
M[r][c] = i++;
if (r == 0) {
if (c % 2 == 0) ++c;
else ++r;
continue;
}
if (c == 0) {
if (r % 2 == 1) ++r;
else ++c;
continue;
}
switch (flag) {
case 'c':
if (c % 2 == 0) {
--r;
} else {
if (M[r][c - 1] != 0) {
++r;
} else {
--c;
flag = 'r';
}
}
break;
case 'r':
if (r % 2 == 1) {
--c;
} else {
if (M[r - 1][c] != 0) {
++c;
} else {
--r;
flag = 'c';
}
}
break;
}
}
//打印输出
final int PWIDTH = Integer.toString(LEN, 10).length();
final String FORMAT = "%0$" + PWIDTH + "d ";
final String FSPACE = "%0$" + PWIDTH + "s ";
for (int r = 0; r < M.length; ++r) {
for (int c = 0; c < M[r].length; ++c) {
if (M[r][c] == 0) {
System.out.printf(FSPACE, "");
} else {
System.out.printf(FORMAT, M[r][c]);
}
}
System.out.println();
}
}
}