回形数组的编程可以通过多种方法实现,以下是几种常见的编程思路:
方法一:顺时针螺旋填充
创建数组:
根据输入的数 \( n \) 创建 \( n \times n \) 的二维数组。
填充数组:
按照顺时针螺旋的顺序填充数组,从 \( (0,0) \) 位置开始,依次填充到 \( (n-1,n-1) \) 位置。
循环条件及终止条件:
使用两个指针 \( i \) 和 \( j \),分别表示当前填充的行和列。每次填充完一个方向后,更新指针位置,并检查是否到达边界或已填充过。
```java
import java.util.Scanner;
public class RoundMatrix {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
int[][] matrix = new int[num][num];
int numElements = num * num;
int row = 0, col = 0;
int direction = 1; // 1: right, 2: down, 3: left, 4: up
for (int i = 0; i < numElements; i++) {
matrix[row][col] = i + 1;
int nextRow = row + direction;
int nextCol = col + (direction == 1 ? 1 : 0);
if (nextRow < 0 || nextRow >= num || nextCol < 0 || nextCol >= num || matrix[nextRow][nextCol] != 0) {
direction = (direction + 1) % 4; // change direction
nextRow = row + direction;
nextCol = col + (direction == 1 ? 1 : 0);
}
row = nextRow;
col = nextCol;
}
// Print the matrix
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
```
方法二:递归填充
创建数组:
同样根据输入的数 \( n \) 创建 \( n \times n \) 的二维数组。
递归填充:
从 \( (0,0) \) 位置开始,递归地填充数组,每次填充一个方向,直到填充完所有元素。
```java
import java.util.Scanner;
public class RoundMatrix {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
int[][] matrix = new int[num][num];
fillMatrix(matrix, 0, 0, num);
// Print the matrix
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
public static void fillMatrix(int[][] matrix, int row, int col, int n) {
if (row < 0 || row >= n || col < 0 || col >= n || matrix[row][col] != 0) {
return;
}
matrix[row][col] = (row * n + col) + 1;
fillMatrix(matrix, row + 1, col, n); // down
fillMatrix(matrix, row - 1, col, n); // up
fillMatrix(matrix, row, col + 1, n); // right
fillMatrix(matrix, row, col - 1, n); // left
}
}
```
方法三:循环赋值
创建数组:
根据输入的数 \( n \) 创建 \( n \times n \) 的二维数组。
循环赋值:
使用一个循环,从外向内逐步缩小回形区域,并赋值。