题目—螺旋矩阵 (shiyancang.cn)

noip201403螺旋矩阵【普及组】数学算法 - 大本营 - 博客园 (cnblogs.com)

以下为搬运代码。一个为算圈数,另外一个是数学方法

思路如下:

1.输入n>>a>>b;

2.用一个循环缩小范围求出a,b所示的数所在的圈数q;

3.再一个循环求出圈数q的第1个数的值sum;

4.用四个if判断a,b所示的数在本圈q的上或下或左或右;

5.根据位置求出t(在sum的基础上需要+的值)

6.输出<<sum+t;

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int n,a,b,i,j,q=0,sum=1,t,l;
    cin>>n>>a>>b;
    for(i=1;i<=n;i++)
        if(a>=i&&a<=n-i+1&&b>=i&&b<=n-i+1) q++;
        else break;
    l=n+2;
    for(i=1;i<=q-1;i++)
    {
        l=n-2*(i-1);
        sum=sum+4*(l-1);
    }
    l=l-2;
    if(a==q)
        t=b-(q-1)-1;
    if(b==n-(q-1))
        t=a-(q-1)-1+(l-1);
    if(a==n-(q-1))
        t=n-(q-1)-b+(l-1)*2;
    if(b==q&&a!=q)
        t=n-(q-1)-a+(l-1)*3;
    cout<<sum+t;
    system("pause");
    return 0;
}

以上方法摘自码酷

2016.7.9更新更加简单的代码,自己做的,时间复杂度O(1),空间复杂度O(1)。以下是代码:

思路(简单说):注意到矩阵是正方形的,因此可以寻找以矩阵中心点为中心的一个最小的正方形矩阵,要包含准备查找的那个数(说明这个数一定在子矩阵的边界上),把子矩阵外的格子数量算出来,然后在子矩阵的四条边界上找这个点的位置,即可最多只遍历一圈就找到格子的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
int n,x,y;
int main(){
    scanf("%d%d%d",&n,&x,&y);
    int t=min(x-1,y-1);
    t=min(t,n-x);
    t=min(t,n-y);
    int matrix=n-t*2;
    int sum=n*n-matrix*matrix;
    if(x==t+1) printf("%d",sum+y-t);
    else if(y==t+matrix) printf("%d",sum+matrix+x-(t+1));
    else if(x==t+matrix) printf("%d",sum+matrix*2-1+(t+matrix)-y);
    else if(y==t+1) printf("%d",sum+matrix*3-2+(t+matrix)-x);
    system("pause");
    return 0;
}

SYCOJ246螺旋矩阵的更多相关文章

  1. PAT 1050. 螺旋矩阵(25)

    本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...

  2. leetcode-Spiral Matrix II 螺旋矩阵2之python大法好,四行就搞定,你敢信?

    Spiral Matrix II 螺旋矩阵 Given an integer n, generate a square matrix filled with elements from 1 to n2 ...

  3. Java-基础编程(螺旋矩阵&乘法表)

    package cn.rick.study; import java.io.BufferedReader;import java.io.InputStreamReader;import java.ut ...

  4. NOIP 2014 普及组 T3 螺旋矩阵

    [题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...

  5. PAT-乙级-1050. 螺旋矩阵(25)

    1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...

  6. NOIP2014-普及组复赛-第三题-螺旋矩阵

    题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵 ...

  7. LeetCode 59. Spiral Matrix II (螺旋矩阵之二)

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

  8. LeetCode 54. Spiral Matrix(螺旋矩阵)

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  9. Code Kata:螺旋矩阵 javascript实现

    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  如图所示,就是一个5*5的螺旋矩阵 我的思路如下: 第一步:拆分 ...

随机推荐

  1. 分布式事务之TCC事务模型

    一.引言 在上篇文章<老生常谈--利用消息队列处理分布式事务>一文中留了一个坑,今天来填坑.如下图所示 如果服务A和服务B之间是同步调用,比如服务C需要按流程调服务A和服务B,服务A和服务 ...

  2. Firebug: Net Panel 使用详解

    Introduction to Firebug: Net Panel Since there is not much user documentation related to Firebug fea ...

  3. 转:Java IO

    转自:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html [案例1]创建一个新文件 ? 1 2 3 4 5 6 7 8 ...

  4. Notepad++ 常用功能:批量取消替换换行、强制刷新数据

    批量取消替换换行 换行批量替换成空格 Ctrl+F 打开查找替换窗口,使用:\r\n 替换成 空格,全部替换 强制刷新数据源,重新加载数据 快捷键:Ctrl+R 或者 Alt+F 然后 L 或者点击菜 ...

  5. CF764B Timofey and cubes 题解

    Content 有一个序列 \(a_1,a_2,a_3,...,a_n\),对于 \(i\in[1,n]\),只要 \(i\leqslant n-i+1\),就把闭区间 \([i,n-i+1]\) 内 ...

  6. CF1006B Polycarp's Practice 题解

    Content 给定一个长度为 \(n\) 的数列,试将其分成 \(k\) 段,使得每一段中的最大值的和最大. 数据范围:\(1\leqslant k,n,a_i\leqslant 2000\). S ...

  7. win10使用cmake编译libevent(解决依赖openssl)

    概述 win10没有安装openssl cmake version: 3.18 libevent version: 2.1.10-stable libevent目前的版本中写好了 CMakeLists ...

  8. 【LeetCode】221. Maximal Square 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址: https://leet ...

  9. git安装与使用,未完待续... ...

    ​ 目录 一.git概念 二.git简史 三.git的安装 四.git结构 五.代码托管中心-本地库和远程库的交互方式 六.初始化本地仓库 七.git常用命令 1.add和commit命令 2.sta ...

  10. Mysql数据库体系

    Mysql数据库体系如下(手绘): 描述: 1.DBMS:database system management是数据库管理软件,平时我们使用的数据库的全称,是C/S架构(client/server)工 ...