螺旋数字正方形
- 题目描述
- 输入描述
- 输出描述
- 样例输入
- 样例输出
- 思路分析
- code
题目描述
打印螺旋数字正方形
输入描述
输入一个整数n,1<=n<=31
输出描述
输出数字正方形。
注意,每个数字占4个字符,右对齐,不全则补足空格;
样例输入
10
样例输出
思路分析
观察数字的规律,这是一个类似一个“回”字的螺旋,并且螺旋方向固定,那么可以分析螺旋的方向和位置,在特定的位置上,数字是成等差数列的,分析好螺旋的规律后,就只差分析出退出循环的条件。
code
import java.util.*;
public class screw_square {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner input = new Scanner(System.in);
int i ,j;
int n = input.nextInt();
int row= n-1;int col= n-1;
int row1=0;int col1=0;
int [][]a = new int [n][n];
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
a[i][j]=0;
}
}
i = 0;j=0;
int flag =0;
int count =1;
//0 : i不变,j++; 1:j不变,i++; 2:i不变,j--; 3:j不变;i--;
do{
if(flag%4==0) {
for(;j<=row;j++) {
a[i][j]=count++;
}
i++;
j--;
row--;
flag++;
}
if(flag%4==1) {
for(;i<=col;i++)
a[i][j]=count++;
col--;flag++;i--;j--;
}
if(flag%4==2) {
for(;j>=row1;j--)
a[i][j]=count++;
row1++;flag++;j++;i--;
}
if(flag%4==3) {
for(;i>col1;i--)
a[i][j]=count++;
col1++;flag++;i++;j++;
}
}while ((row>=row1));
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
System.out.printf("%4d",a[i][j]);
}
System.out.print("\n");
}
}
}