28 n层正方形
作者: Turbo时间限制: 1S章节: 二维数组
问题描述 :
编写程序,输出n层正方形图案。正方形图案最外层是第一层,每层用的数字和层数相同。
输入说明 :
正方形图案的层数n(小于等于25)。
输出说明 :
2n-1行2n-1列数据,同一行上的数据之间用一个空格分隔。
比如3层图案,最外层都是1,里面一层都是2,最里面一层只有一个数3,所以是5×5的矩形,如下:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
输入范例 :
3
输出范例 :
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
import java.util.Scanner;
public class test_28 {
/**
* 28 n层正方形
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int row = 2*n-1;
int col = row;
int[][] a = new int[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
a[i][j]=0;
}
}
int start=0,end=row*col,num,x,y;
char status = 'r';
x=0;
y=0;
num=1;
while(start<end){
start++;
switch (status){
case 'r':
if(y==col-1 || a[x][y+1]!=0){
status='d';
a[x][y]=num;
x++;
}else{
a[x][y]=num;
y++;
}
break;
case 'd':
if(x==row-1 || a[x+1][y]!=0){
status='l';
a[x][y]=num;
y--;
}else{
a[x][y]=num;
x++;
}
break;
case 'l':
if(y==0 || a[x][y-1]!=0){
status='u';
a[x][y]=num;
x--;
}else{
a[x][y]=num;
y--;
}
break;
case 'u':
if(x==0 || a[x-1][y]!=0){
status='r';
a[x][y]=num;
y++;
num++;
}else{
a[x][y]=num;
x--;
}
break;
default:
System.out.println();
}
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if(j==col-1){
System.out.println(a[i][j]);
}else {
System.out.print(String.valueOf(a[i][j])+" ");
}
}
}
}
}