回形数格式方阵的实现
程序员文章站
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();
}
}
}
上一篇: String.format()方法应用
下一篇: java微信公众号消息模板推送功能实现