题目
一个n行n列的螺旋矩阵可由如下方法生成:
从矩阵的左上角(第1行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1,2,3,…,n,便构成了一个螺旋矩阵。
下图是一个 n = 4 时的螺旋矩阵。
输入格式
输入共一行,包含三个整数n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
输出格式
输出一个整数,表示相应矩阵中第i行第j列的数。
数据范围
对于50%的数据:1≤n≤100
对于100%的数据:1≤n≤30,000,1≤i≤n,1≤j≤n
样例输入
4 2 3
样例输出
14
代码
#include<stdio.h>
int f(int n,int x,int y)
{
if(x!=1&&y!=1&&x!=n&&y!=n)
{
return f(n-2,x-1,y-1)+(n-1)*4;
}
else
{
if(x==1)
{
return y;
}
if(y==n)
{
return (n-1)+x;
}
if(x==n)
{
return 3*n-y-1;
}
if(y==1)
{
return 3*(n-1)+(n-x+1);
}
}
}
int main()
{
int n,x,y;
scanf("%d%d%d",&n,&x,&y);
int p=f(n,x,y);
printf("%d\n",p);
return 0;
}
文章内容仅为本人算法题练习学习记录