蓝桥杯模拟赛第七题螺旋矩阵
问题描述
对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。
例如,一个 4 行 5 列的螺旋矩阵如下:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
输入格式
输入的第一行包含两个整数 n, m,分别表示螺旋矩阵的行数和列数。
第二行包含两个整数 r, c,表示要求的行号和列号。
输出格式
输出一个整数,表示螺旋矩阵中第 r 行第 c 列的元素的值。
样例输入
4 5
2 2
样例输出
15
评测用例规模与约定
对于 30% 的评测用例,2 <= n, m <= 20。
对于 70% 的评测用例,2 <= n, m <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= r <= n,1 <= c <= m。
面对螺旋数组的题,可以在leetcode找到类似题型的题练习并查看官方详解
leetcode 54:链接: leetcode54题螺旋矩阵.
leetcode 59:链接: leetcode54题螺旋矩阵Ⅱ
import java.util.Scanner;
//这个揭发也是运用leetcode59题的官网第二中解法思路
//按层顺时针一层一层放入数字
public class Main {
public static void main(String[] args) {
int num = 1;
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int a = sc.nextInt();
int b = sc.nextInt();
int [][] arr = new int[n][m];
int r1 = 0, r2 = n - 1;
int c1 = 0, c2 = m - 1;
while (r1 <= r2 && c1 <= c2) {
for (int c = c1; c <= c2; c++) arr[r1][c] = num++;
for (int r = r1 + 1; r <= r2; r++) arr[r][c2] = num++;
if (r1 < r2 && c1 < c2) {
for (int c = c2 - 1; c > c1; c--) arr[r2][c] = num++;
for (int r = r2; r > r1; r--) arr[r][c1] = num++;
}
r1++;
r2--;
c1++;
c2--;
}
System.out.println(arr[a-1][b-1]);
}
}