欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

回形数格式方阵的实现

程序员文章站 2024-03-15 14:32:59
...

回形数格式方阵的实现

从键盘输入一个整数(1~20),则以该数字为矩阵的大小,把1,2,3,4,…… n*n按照顺时针螺旋的形式填入其中。
例如:
输入2:
输出:
1 2
4 3

方法1:

按照题意,用程序螺旋放入,用k来记录方向,m表示放入的数字。i,和j分别是行与列。
回形数格式方阵的实现

import java.util.Scanner;

public class RectangleTest 
{
    public static void main(String[] args) 
    {
        Scanner in = new Scanner(System.in);
        System.out.println("输入一个数字");
        int len = in.nextInt();
        int[][] arr = new int[len][len];

        int s = len * len;
        int k = 1;
        int i = 0, j = 0;
        for (int m = 1; m <= s; m++) //m从1开始放入s个
        {
            if (k == 1) 
            {
                if (j < len && arr[i][j] == 0)
                    arr[i][j++] = m;
                else 
                {
                    k = 2;//换方向
                    i++;//i这一行已经放了,所以到下一行
                    j--;//j = len 是跳出的,所以j回退一个
                    m--;//m也回退一个
                }
            } 
            else if (k == 2) 
            {
                if (i < len && arr[i][j] == 0)
                    arr[i++][j] = m;
                else 
                {
                    k = 3;
                    i--;
                    j--;
                    m--;
                }
            } 
            else if (k == 3) 
            {
                if (j >= 0 && arr[i][j] == 0)
                    arr[i][j--] = m;
                else 
                {
                    k = 4;
                    i--;
                    j++;
                    m--;
                }

            } 
            else if (k == 4) 
            {
                if (i >= 0 && arr[i][j] == 0)
                    arr[i--][j] = m;
                else 
                {
                    k = 1;
                    i++;
                    j++;
                    m--;
                }
            }
        }
        for (int[] row : arr) 
        {
            for (int odd : row)
                System.out.printf("%4d", odd);
            System.out.println();
        }
    }
}

回形数格式方阵的实现

方法2:

这个方法与上一个是同样填入,横为x轴,纵为y轴,但是外层循环条件不同。
用count表示要填入的数字,minX与maxX在填完一圈后的值在接近,直到minX>maxX。相等时,是为了保证奇数行(列)最中间的一个值填入,因为奇数行(列)最后肯定是横着向右输入,此时minX = maxX。

奇数行(列)时,最中间的是那个圆圈,minX = minY = maxX = maxY
回形数格式方阵的实现

import java.util.Scanner;

public class RetangleTest2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] arr = new int[n][n];

        int count = 0;//要填入的数字
        int maxX = n - 1;//x轴的最大下标
        int maxY = n - 1;//y轴的最大下标
        int minX = 0;//x轴的最小下标
        int minY = 0;//y轴的最大下标
        while (minX <= maxX) //也可以写成minY <= maxY
        {
            for (int x = minX; x <= maxX; x++) 
            {
                arr[minY][x] = ++count;
            }
            minY++;
            for (int y = minY; y <= maxY; y++) 
            {
                arr[y][maxX] = ++count;
            }
            maxX--;
            for (int x = maxX; x >= minX; x--) 
            {
                arr[maxY][x] = ++count;
            }
            maxY--;
            for (int y = maxY; y >= minY; y--) 
            {
                arr[y][minX] = ++count;
            }
            minX++;
        }
        for (int m = 0; m < arr.length; m++) 
        {
            for (int j = 0; j < arr[m].length; j++)
                System.out.printf(arr[m][j] + "\t");
            System.out.println();
        }
    }
}

回形数格式方阵的实现

相关标签: java