蓝桥杯java组---对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵

蓝桥杯模拟赛第七题螺旋矩阵

问题描述
  对于一个 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]);
	    }
		
	}

原创文章 8 获赞 14 访问量 591

猜你喜欢

转载自blog.csdn.net/weixin_43950187/article/details/106124864