螺旋矩阵

问题描述

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

例如,一个 4 行 5 列的螺旋矩阵如下:

1 2 3 4 5

14 15 16 17 6

13 20 19 18 7

12 11 10 9 8

输入描述

169955d5dc164f15a3b773aa6274e0d2.png

输出描述

输出一个整数,表示螺旋矩阵中第 r 行第 c 列的元素的值。

输入输出样例

示例

输入

4 5
2 2

输出

15

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 2518  |  总提交次数: 2741  |  通过率: 91.9%

难度: 困难   标签: 2020, 模拟, 暴力, 省模拟赛

代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // 声明所需的变量:n(行数),m(列数),r(目标行),c(目标列)
  int n, m, r, c;
  
  // 从标准输入读取矩阵的尺寸(n和m)以及目标位置(r和c)
  scanf("%d%d%d%d", &n, &m, &r, &c);
  
  // 初始化变量a为1(用于填充矩阵),声明一个二维数组x用于存储螺旋矩阵,最大尺寸为1010x1010
  int a = 1, x[1010][1010] = {0};  // 初始化数组x所有元素为0
  
  // 初始化起始位置
  int i = 0, j = 0;
  x[0][0] = 1;  // 将起始位置的值设置为1
  
  // 循环填充矩阵,直到所有元素都被填充
  while (a < n * m)
  {
    // 向右移动填充
    while (j + 1 < m && x[i][j + 1] == 0)
      x[i][++j] = ++a;
    
    // 向下移动填充
    while (i + 1 < n && x[i + 1][j] == 0)
      x[++i][j] = ++a;
    
    // 向左移动填充
    while (i - 1 >= 0 && x[i - 1][j] == 0)
      x[--i][j] = ++a;
    
    // 向上移动填充
    while (j - 1 >= 0 && x[i][j - 1] == 0)
      x[i][--j] = ++a;
  }
  
  // 输出目标位置(r-1, c-1)的值
  printf("%d", x[r - 1][c - 1]);
  
  return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值