螺旋数字正方形

  • 题目描述
  • 输入描述
  • 输出描述
  • 样例输入
  • 样例输出
  • 思路分析
  • code


题目描述

打印螺旋数字正方形

输入描述

输入一个整数n,1<=n<=31

输出描述

输出数字正方形。
注意,每个数字占4个字符,右对齐,不全则补足空格;

样例输入

10

样例输出

螺旋正方形python 螺旋正方形java_习题

思路分析

观察数字的规律,这是一个类似一个“回”字的螺旋,并且螺旋方向固定,那么可以分析螺旋的方向和位置,在特定的位置上,数字是成等差数列的,分析好螺旋的规律后,就只差分析出退出循环的条件。

螺旋正方形python 螺旋正方形java_习题_02

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");
        }

    }
}