NOIP 2014 螺旋矩阵
2016-11-02 20:41
176 查看
题目描述
一个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列的数是多少。
【题目分析】
递归。
【代码】
一个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列的数是多少。
【题目分析】
递归。
【代码】
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int n,x,y; int f(int n,int x,int y) { if (x!=n&&x!=1&&y!=1&&y!=n) return 4*(n-1)+f(n-2,x-1,y-1); else { if (x==1) return y; if (y==n) return n-1+x; if (x==n) return n-1+n+(n-y); if (y==1) return n-1+n-1+n+n-x; } } int main() { scanf("%d%d%d",&n,&x,&y); printf("%d",f(n,x,y)); }
相关文章推荐
- 【数论】[NOIP2014]螺旋矩阵
- NOIP2014普及组--螺旋矩阵(模拟)
- [NOIP2014][vijos1913]螺旋矩阵(模拟)
- 【NOIP2014 普及组】螺旋矩阵
- [普及]NOIP 2014 螺旋矩阵
- [NOIP普及组2014第三题]螺旋矩阵
- NOIP2014(普及组)T3 螺旋矩阵
- NOIP 2014 飞扬的小鸟
- Noip 2014 提高组 解方程
- jzoj3797 [NOIP2014模拟8.21] 签到题3
- 【SDnoip2014夏令营】【day4】
- NOIP2014无线网络发射选址【Pascal】
- JZOJ3845. 【NOIP2014八校联考第1场第1试9.20】简单题(simple)
- noip2014提高组day2二题题解-rLq
- NOIP 2014 - 提高组 寻找道路
- NOIP2014提高组 联合权值
- luogu1328 生活大爆炸版石头剪刀布(NOIP2014提高组第1题)
- NOIP 2014 普及组 T4 子矩阵
- NOIP2014-普及组复赛-第四题-子矩阵
- noip2014 飞扬的小鸟 DP