螺旋 矩阵

题目

一个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;
}

文章内容仅为本人算法题练习学习记录

猜你喜欢

转载自blog.csdn.net/qq_63294590/article/details/123037077