刚开始学JAVA,遇到一面试题感觉有点意思,费劲吧啦几的给做出来了。
输入一个数字n,输出n阶回型矩阵
例如:输入5
输出
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
分析思路:
回型填数最外圈的值依次是递增的,所以我们可以从最外圈赋值
1.从最上面一行开始正向赋值 ,即二维数组的行不变,列递增,赋值递增。
2.从最右面一列开始正向赋值 ,即二维数组的列不变,行递增,赋值递增,注意:这时总行数-1,起始位置从第二行开始。
3.从最下面一行反向赋值 ,即二维数组的行不变,列递减,赋值递增,注意:这时总列数-1,起始位置从倒数第二列开始。
4.从最左面一列反向赋值 ,即二维数组的列不变,行递减,赋值递增,注意:这时总行数-1,起始位置从倒数第二行开始。
依次进行,一圈一圈知道完成结果。
public class Interview2 {
public static void main(String[] args) {
System.out.println("请输入一个数字");
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int[][] arr = new int[a][a];
int lMax = arr.length;
int cMax = arr[0].length;
int value = 0;
int l = 0, m = 0;
while (0 < cMax && 0 < lMax) {
for (int n = 0; n < cMax; n++) {
arr[l][m] = ++value;
m++;
}
lMax--;
for (int n = 0; n < lMax; n++) {
arr[l + 1][m - 1] = ++value;
l++;
}
cMax--;
for (int n = 0; n < cMax; n++) {
arr[l][m - 2] = ++value;
m--;
}
lMax--;
for (int n = 0; n < lMax; n++) {
arr[l - 1][m - 1] = ++value;
l--;
}
cMax--;
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
}