题目描述 Description
一个n行n列的螺旋矩阵可由如下方法生成:

从矩阵的左上角(第1行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, ... , n,便构成了一个螺旋矩阵。2

下图是一个n = 4 时的螺旋矩阵。

1     2     3     4

12    13    14    5

11    16    15    6

10     9     8     7

现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。

(本题目为2014NOIP普及T3,目前数据为民间数据(by Soha))

 输入输出格式 Input/output
输入格式:
输入共一行,包含三个整数 n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
输出格式:
输出共一行,包含一个整数,表示相应矩阵中第i行第j列的数。
 输入输出样例 Sample input/output
样例测试点#1
输入样例:
4 2 3
输出样例:
14
思路:

首先处理特殊情况:

1、N=1直接输出1

2、如果要找的数字在边界上,直接计算即可

中间情况

1、首先算出外围有多少数字

2、分四个方向计算数字排位

以上为最简单的模拟方法,方法直观,还有更简洁的方法自行思考

代码如下(本代码来自:http://blog.csdn.net/cnyali/article/details/40998345):

 #include<stdio.h>
int min(int x,int y,int z,int u)
{
int p;
p=x<y?x:y;
p=p<z?p:z;
p=p<u?p:u;
return p;
}
int main()
{
int i,j,k,m,n;
int x,y,ans;
scanf("%d%d%d",&n,&x,&y);
if(n==)//只有1个的话输出就得了
{
puts("");
return ;
}
k=min(x,y,n-x+,n-y+);
if(k==)//如果要找的数字在边界上,直接计算即可
{
if(x==)ans=y;
else if(y==n)ans=n-+y;
else if(x==n)ans=(n-)*+(n-y+);
else if(y==)ans=(n-)*+(n-x+);
printf("%d\n",ans);
return ;
}
ans=;
m=n;
for(i=;i<k;i++)//首先算出外围有多少数字
{
ans+=(m-)*;
m=m-;
}
if(k==x)//上
{
ans+=y-k+;
}
else if(k==n-y+)//左
{
ans+=m-;
ans+=x-k+;
}
else if(k==n-x+)//右
{
ans+=(m-)*;
ans+=(n-y+)-k+;
}
else if(k==y)//下
{
ans+=(m-)*;
ans+=(n-x+)-k+;
}
printf("%d\n",ans);
return ;
}

NOIP2014-普及组复赛-第三题-螺旋矩阵的更多相关文章

  1. NOIP2005-普及组复赛-第三题-采药

    题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山 ...

  2. NOIP2002-普及组复赛-第三题-选数

    题目描述 Description 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整 ...

  3. 【NOIP2014 普及组】螺旋矩阵

    [NOIP2014 普及组]螺旋矩阵 一.题目 [NOIP2014 普及组]螺旋矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 18  解决: 0 [提交][状态][讨论版] 题目描 ...

  4. NOIP2018普及组复赛游记

    2018年11月10日,NOIP2018普及组复赛. 这是我初中阶段最后一次复赛了. 和往常一样,我们在预定的早上7点,没有出发. 10分钟之后,人终于到齐了,于是出发了,一路无话. 到了南航,合照三 ...

  5. 【python】Leetcode每日一题-螺旋矩阵2

    [python]Leetcode每日一题-螺旋矩阵2 [题目描述] 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . ...

  6. 【python】Leetcode每日一题-螺旋矩阵

    Leetcode每日一题-螺旋矩阵 [题目描述] 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例1: 输入:matrix = [[1,2,3], ...

  7. NOIP2016普及组复赛解题报告

    提高组萌新,DAY1DAY2加起来骗分不到300,写写普及组的题目聊以自慰. (附:洛谷题目链接 T1:https://www.luogu.org/problem/show?pid=1909 T2:h ...

  8. noip普及组考纲+样题合集——初级篇(OIer必看)

    很明显我是想发提高组合集的.普及组考纲……用发么. 当然如果你想看的话也可以,就一点点: 递归.排序…… 很明显上面那都不是重点.普及组只要掌握搜索.二分.单调队列.数学.随机化等等,一等奖没问题的, ...

  9. [NOIP2014] 普及组

    珠心算测验 模拟. 将所有“两个不同数之和”装进桶里,扫描原数组记录满足条件的数的个数. /*by SilverN*/ #include<iostream> #include<alg ...

随机推荐

  1. java 生成二维码

    package com.sun.erwei; import java.awt.Graphics2D;import java.awt.geom.AffineTransform;import java.a ...

  2. Scala 字段定义

    Scala 中定义字段只有val, var两种方式,都要在定义的同时即赋值,var 可以用占位符' _ '代替. 抽象类中定义的抽象字段不用赋初值,抽象方法也不用写方法体.(在子类中给抽象字段赋值和实 ...

  3. Log4J1升级Log4J2

    近期,碰到需要将项目中的Log4J1升级到Log4J2,现进行下总结.交代下技术背景:web项目,基于Java + Maven 1. 依赖 <dependency> <groupId ...

  4. TheFifthWeekText

    类的构造方法是当创建对象时,对象自动调用的对对象进行初始化的方法.他没有返回值,而且构造方法名与类名是相同的.如果类中没有定义构造方法,Java编译器在编译时会自动给它提供一个没有参数的默认构造方法, ...

  5. Objective-C与Swift下的自定义打印函数(Debug和Release)

    1.Objective-C 在使用Objective-C进行开发的过程中,为了Debug会不断的设置打印函数.如下图是我们经常用的,用来测试监听方法的实现与否: NSLog(@"%s&quo ...

  6. NIO 入门

    新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的.NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的.面向块的 I/O.通过定义包含数据的类,以及通过以块的形式处 ...

  7. PNPOLY - Point Inclusion in Polygon Test

    https://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html The C Code Here is the code, ...

  8. HTTP中的重定向和请求转发的区别

    原文出处:http://blog.csdn.net/meiyalei/article/details/2129120 一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下: reque ...

  9. neutron openvswitch agent实现安全组的方法

    关于openstack安全组,采用一问一答的形式记录如下 1. 是加载在计算节点的还是网络节点的? 是加载在计算节点的 2. 是使用iptable规则实现的吗? M版的neutron实现了openvs ...

  10. zoj 1718 poj 2031 Building a Space Station

    最小生成树,用了Kruskal算法.POJ上C++能过,G++不能过... 算出每两个圆心之间的距离,如果距离小于两半径之和,那么这两个圆心之间的距离直接等于0,否则等于距离-R[i]-R[j]. # ...