输入两个整数 nn 和 mm,输出一个 nn 行 mm 列的矩阵,将数字 11 到 nn×mm 按照回字蛇形填充至矩阵中。
做这道题之前,我学习了螺旋矩阵的知识,把矩阵看成一圈一圈的,但在代码编写时最重要的一个点就是,是否还有空间可以上下
for (int i = right-1; i >= left && top<button; i--) arr[button][i] = cost++; for (int i = button-1; i >top && left<right; i--) arr[i][left] = cost++;
代码如下:
import java.util.Scanner; public class Java31 { public static void main(String[] args) { /** * 输入两个整数 n和m,输出一个n行m列的矩阵,将数字1到n×m按照回字蛇形填充至矩阵中。 * 具体矩阵形式可参考样例。 * 输入格式 * 输入共一行,包含两个整数n和m。 * 输出格式 * 输出满足要求的矩阵。矩阵占n行,每行包含m个空格隔开的整数。 */ Scanner sc = new Scanner(System.in); int n = sc.nextInt();//行 int m = sc.nextInt();//列 int cost = 1; int left = 0; int right = m-1; int top = 0; int button = n-1; int[][] arr = new int[100][100]; while (left<=right&&top<=button){ for (int i = left; i<=right; i++) arr[top][i] = cost++; for (int i = top+1; i <= button; i++) arr[i][right] = cost++; for (int i = right-1; i >= left && top<button; i--) arr[button][i] = cost++; for (int i = button-1; i >top && left<right; i--) arr[i][left] = cost++; button--;left++;right--;top++; } for (int k = 0; k < n; k++) { for (int l = 0; l < m; l++) { System.out.print(arr[k][l]+" "); } System.out.println("\n"); } } }