NOIP2014 普及組第三題 螺旋矩陣

瘋狂的函數 2022-01-07 20:42:12 阅读数:709

noip2014 noip 普及 第三 螺旋

題目描述

一個 n 行 n 列的螺旋矩陣可由如下方法生成:

從矩陣的左上角(第 1 行第 1 列)出發,初始時向右移動;如果前方是未曾經過的格子, 則繼續前進,否則右轉;重複上述操作直至經過矩陣中所有格子。根據經過順序,在格子中 依次填入 1, 2, 3, ... , n2,便構成了一個螺旋矩陣。

下圖是一個 n = 4 時的螺旋矩陣。

1     2    3   4

12  13   14  5

11  16  15   6

10   9     8   7

現給出矩陣大小 n 以及 i 和 j,請你求出該矩陣中第 i 行第 j 列的數是多少。

輸入

輸入共一行,包含三個整數 n,i,j,每兩個整數之間用一個空格隔開,分別錶示矩陣大小、待求的數所在的行號和列號。

輸出

輸出共一行,包含一個整數,錶示相應矩陣中第 i 行第 j 列的數。

樣例輸入

4 2 3

樣例輸出

14

提示

對於 50%的數據,1 ≤ n ≤ 100;
對於 100%的數據,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n。

程序實現

#include<bits/stdc++.h>
using namespace std;
int turn(int n,int x,int y)
{
if(x==1||y==n)
{
return x+y-1;
}
else if(x==n||y==1)
{
return 4*n-x-y-1;
}
else
{
return turn(n-2,x-1,y-1)+n*4-4;
}
}
int main()
{
int n,x,y;
cin>>n>>x>>y;
cout<<turn(n,x,y);
return 0;
}
版权声明:本文为[瘋狂的函數]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201072042124205.html