根据输入的行和列,螺旋输出数字,
输入的是8和8
输出 例如:
1 2 3 4 5 6 7 8
28 29 30 31 32 33 34 9
27 48 49 50 51 52 35 10
26 47 60 61 62 53 36 11
25 46 59 64 63 54 37 12
24 45 58 57 56 55 38 13
23 44 43 42 41 40 39 14
22 21 20 19 18 17 16 15
package oop;
import java.util.Scanner;
public class TE0109 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); int m = sc.nextInt();
int[][] arr = new int[n][m];
int dir = 0; // 0 代表左往右 1往下 2 往左 3往上
int i = 0,j=0;
arr[i][j]=1;
for(int step = 2;step<=n*m;step++) {
if(dir==0) {
//判断当前位置是否可以填入数据
if(j==m-1 || arr[i][j+1]!=0) { //不可以填入 由于短路运算 先判断是否可以加
dir=1;
step--;
}else {
j++;
arr[i][j]= step;
}
//必须要有这里的continue;和step++ 否则 会超出n*m的范围
continue;
}
if(dir==1) {
//判断当前位置是否可以填入数据
if( i==n-1 ||arr[i+1][j]!=0) { //不可以填入
dir=2;
step--;
}else {
i++;
arr[i][j]= step;
}
continue;
}
if(dir==2) {
//判断当前位置是否可以填入数据
if( j==0||arr[i][j-1]!=0) { //不可以填入
dir=3;
step--;
}else {
j--;
arr[i][j]= step;
}
continue;
}
if(dir==3) {
//判断当前位置是否可以填入数据
if( i==0||arr[i-1][j]!=0) { //不可以填入
dir=0;
step--;
}else {
i--;
arr[i][j]= step;
}
continue;
}
}
for(i = 0;i<n;i++) {
for(j = 0;j<m;j++) {
System.out.printf(arr[i][j]+"\t");
}
System.out.println();
}
}
}