756. 蛇形矩阵
输入两个整数 nn 和 mm,输出一个 nn 行 mm 列的矩阵,将数字 11 到 n×mn×m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 nn 和 mm。
输出格式
输出满足要求的矩阵。
矩阵占 nn 行,每行包含 mm 个空格隔开的整数。
数据范围
1≤n,m≤1001≤n,m≤100
输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5
蛇形矩阵
就是这样的矩阵:
输出矩阵高度和宽度,输出矩阵。
题解:
用 left 指向待输出部分的最左侧,right 指向待输出部分的最右侧,top 指向待输出部分的最上侧,bottom 指向待输出部分的最下侧。
循环指向:
- 从左到右构造最上侧的一行,待出去部分的最上侧下移,然后top+1。
- 从上到下构造最右侧的一列,待输出部分的最右侧左移,然后right-1。
- 从右到左构造最下方的一行,待输出部分的最下侧上移,然后bottom-1。
- 从下到上构造最右侧的一列。待输出部分的最左侧右移。然后left+1。
直到:left < right && top < bottom
示意图:
代码
import java.util.*;
public class Main {
public static void main(String[] args)throws Exception {
Scanner scanner = new Scanner(System.in);
int[][] arr = new int[110][110];
int n, m;
n = scanner.nextInt();
m = scanner.nextInt();
int l = 0, r = m - 1;
int top = 0 , bottom = n - 1;
int k = 1;
while (l <= r && top <= bottom) {
//上面一行
for (int i = l ; i <= r && top <= bottom ; i ++) {
arr[top][i] = k++;
}
top ++;
//右边一行
for (int i = top ; i <= bottom && l <= r ; i ++) {
arr[i][r] = k ++;
}
r--;
//下面一行
for (int i = r ; i >= l && top <= bottom; i --) {
arr[bottom][i] = k ++;
}
bottom--;
//左边一行
for (int i = bottom; i >= top && l <= r; i--) {
arr[i][l] = k ++;
}
l++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.printf("%d ",arr[i][j]);
}
System.out.println();
}
}
}
评论区