打印一个 N*N 的方阵,N为每边 N=15 打印出下面图形
字符的个数(3<N<20), 要求最 TTTTTTTTTTTTTTT
外一层为"T", 第二层为"J", 从第三层 TJJJJJJJJJJJJJT
起每层依次打印数字 1,2,3,... TJ11111111111JT
(右图以N为15为例) TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT
字符的个数(3<N<20), 要求最 TTTTTTTTTTTTTTT
外一层为"T", 第二层为"J", 从第三层 TJJJJJJJJJJJJJT
起每层依次打印数字 1,2,3,... TJ11111111111JT
(右图以N为15为例) TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT
TJJJJJJJJJJJJJT
TJ11111111111JT
TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT
帮排版
* 算法说明:
* 分析该矩阵需求,有一个特点,除去最外层两圈,
* 中间所打印的数字的规律,可以认为是该数字所在位置距离四个边的距离中最短的,
* 再仔细分析,如果将J和T也算作数字,也能符合这个规律(假定J是0,T是-1)。
*
* 所以,问题简化为,算出某一个位置据四边的最短距离,然后取“TJ123456789”这个字符串中响应位置的字符打印即可。
*
*
* @author jinxfei
*
*/
public class Test {
private static String allChars="TJ123456789";
public static void main(String[] args){
int order=20;//矩阵的大小
for(int i=0; i<=order;i++){
for (int j=0; j<=order;j ++){
System.out.print(getChar(j,i,order));
}
System.out.println();
}
}
//计算当前坐标应该打印的字符
private static char getChar(int y,int x, int order){
//首先算出当前坐标据四个边的位置
int toLeft=y;
int toTop=x;
int toRight=order-y;
int toBottom=order-x;
//取其中的最小值
return allChars.charAt(getMin(toLeft,toTop,toRight,toBottom));
}
//计算取四个数中最小的值
private static int getMin(int a1, int a2, int a3, int a4){
int min=getMin(a1,a2);
min=getMin(min,a3);
min=getMin(min,a4);
return min;
}
//取两个数字中的最小值。
private static int getMin(int a1, int a2){
int min=a1;
if (min>a2){
min=a2;
}
return min;
}
}