黑马程序员技术交流社区
标题:
完美打印n阶螺旋方阵(使用二维数组)
[打印本页]
作者:
清香白莲
时间:
2015-4-29 22:31
标题:
完美打印n阶螺旋方阵(使用二维数组)
/**
* 1.如题,完美打印n阶螺旋方阵。程序只使用了简单的输入输出函数。
* 2.你可以测试程序,输出的方阵实现了数字右对齐,效果非常美观。
* 3.测试程序时,键入一个整数n,代表方阵的阶数。程序不做输入检查,请输入有意义的整数。
* 4.如果在命令行模式下运行程序,建议n<=20,一般cmd窗口的一行只能容纳80个字符。
* 5.测试样例:10
* 1 2 3 4 5 6 7 8 9 10
* 36 37 38 39 40 41 42 43 44 11
* 35 64 65 66 67 68 69 70 45 12
* 34 63 84 85 86 87 88 71 46 13
* 33 62 83 96 97 98 89 72 47 14
* 32 61 82 95 100 99 90 73 48 15
* 31 60 81 94 93 92 91 74 49 16
* 30 59 80 79 78 77 76 75 50 17
* 29 58 57 56 55 54 53 52 51 18
* 28 27 26 25 24 23 22 21 20 19
*
* 6.程序不再给出注释,因为我没有时间。
* 7.将来有机会的话,我会给出用一维数组和不用数组实现的办法。
*
* 8.@author 清香白莲
*/
import java.util.*;
public class HelloJava
{
public static int[][] getScrewMatrix(int n)
{
int[][] a = new int[n][n];
int x = 1;
int i = 0;
int j = 0;
int d = 0;
while (x <= n * n)
{
switch(d)
{
case 0:
a[i][j++] = x++;
if (j == n || a[i][j] != 0)
{
--j;
++i;
d = (d + 1) % 4;
}
break;
case 1:
a[i++][j] = x++;
if (i == n || a[i][j] != 0)
{
--i;
--j;
d = (d + 1) % 4;
}
break;
case 2:
a[i][j--] = x++;
if (j == -1 || a[i][j] != 0)
{
++j;
--i;
d = (d + 1) % 4;
}
break;
case 3:
a[i--][j] = x++;
if (i == -1 || a[i][j] != 0)
{
++i;
++j;
d = (d + 1) % 4;
}
break;
}
}
return a;
}
public static void printScrewMatrix(int[][] a)
{
int bit = getNumLength(a.length * a.length) + 1;
for (int i = 0; i < a.length; i++)
{
for (int j = 0; j < a[i].length; j++)
{
for (int k = 1; k <= bit - getNumLength(a[i][j]); k++)
System.out.print(" ");
System.out.print(a[i][j]);
}
System.out.println();
}
}
public static int getNumLength(int n)
{
int i = 0;
do
{
++i;
n /= 10;
} while (n != 0);
return i;
}
public static void main(String[] args)
{
printScrewMatrix(getScrewMatrix(new Scanner(System.in).nextInt()));
}
}
复制代码
作者:
清香白莲
时间:
2015-4-29 22:33
还请版主能给点技术分。
作者:
Oh.Ba
时间:
2015-4-29 22:51
厉害。我弄不明白
作者:
hejinze
时间:
2015-4-29 22:55
哎,看不懂。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2