输入两个整数 n n n和 m m m,输出一个 n n n行 m m m列的矩阵,将数字 1 1 1到 n × m n×m n×m按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数
n
n
n和
m
m
m。
输出格式
输出满足要求的矩阵。
矩阵占 n n n行,每行包含 m m m个空格隔开的整数。
数据范围
1
≤
n
,
m
≤
100
1≤n,m≤100
1≤n,m≤100
输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5
思路
这题之前好像见过,怎么搞的忘了
网上大佬思路:
代码
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), m = sc.nextInt();
int[][] M = new int[100][100];
int[][] d = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int l = -1, r = m, h = -1, b = n;
int cnt = 0;
for(int k = 1, i = 0, j = 0; k <= n * m; ){
int ni = i + d[cnt][0], nj = j + d[cnt][1];
if(nj == r) h ++;
else if(ni == b) r --;
else if(nj == l) b --;
else if(ni == h) l ++;
else{
M[i][j] = k;
k++;
i = ni;
j = nj;
continue;
}
cnt = (cnt + 1) % 4;
}
for(int i = 0; i < n; i ++){
for(int j = 0; j < m; j++){
if(j != 0) System.out.print(" ");
System.out.print(M[i][j]);
}
System.out.println();
}
}
}
y总代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), m = sc.nextInt();
int[][] res = new int[n][m];
int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};
int x = 0, y = 0, d = 1;
for (int i = 1; i <= n * m; i ++ ) {
res[x][y] = i;
int a = x + dx[d], b = y + dy[d];
if (a < 0 || a >= n || b < 0 || b >= m || res[a][b] > 0) {
d = (d + 1) % 4;
a = x + dx[d];
b = y + dy[d];
}
x = a;
y = b;
}
for (int i = 0; i < n; i ++ ) {
for (int j = 0; j < m; j ++ )
System.out.printf("%d ", res[i][j]);
System.out.println();
}
}
}