螺旋矩阵 3
【题目背景】
一个 n 行 n 列的螺旋矩阵可由如图所示的方法生成,观察图片,找出填数规律。填 数规则为从 1 开始填到 n×n。
1 2 6 7 15 16 28 29
3 5 8 14 17 27 30 43
4 9 13 18 26 31 42 44
10 12 19 25 32 41 45 54
11 20 24 33 40 46 53 55
21 23 34 39 47 52 56 61
22 35 38 48 51 57 60 62
36 37 49 50 58 59 63 64
现在给出矩阵大小 n 以及 i 和 j,请你求出该矩阵中第 i 行第 j 列的数是多少。
【输入格式】
从标准输入读入数据。 共一行,包含三个整数 n(1≤n≤1,000)、i(1≤i≤n)、j(1≤ j≤n),每两个整 数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
【输出格式】
输出到标准输出。 一个整数,表示相应矩阵中第 i 行第 j 列的数。
【样例 1 输入】
8 2 8
【样例 1 输出】
43
【子任务】
• 对于 30% 的测试数据,n≤10;
• 对于 60% 的测试数据,n≤100;
• 对于 100% 的测试数据,n≤1,000;
• 特别地,对于 20% 的测试数据,i = j = 1。
求C++代码,在线等
另外,我用人格担保,回答了正确了肯定是要采纳的
各位大佬求救救
#include <iostream>
using namespace std;
int main()
{
int n, ii, jj;
cin >> n >> ii >> jj;
ii--;
jj--;
int *p = new int[n * n];
int d = 0;
int i = 0;
int j = 0;
for (int x = 1; x <= n * n; x++)
{
if (i == ii && j == jj) { cout << x; break; }
p[i * n + j] = x;
if (d == 0 && (i == 0 && j != n - 1))
{
j = j + 1;
d = 1;
}
else if (d == 0 && j == n - 1)
{
i = i + 1;
d = 1;
}
else if (d == 1 && (j == 0 && i != n - 1))
{
i = i + 1;
d = 0;
}
else if (d == 1 && i == n - 1)
{
j = j + 1;
d = 0;
}
else if (d == 0)
{
i--;
j++;
}
else
{
i++;
j--;
}
}
//for (int i = 0; i < n; i++)
//{
// for (int j = 0; j < n; j++)
// {
// cout << p[i * n + j] << " ";
// }
// cout << endl;
//}
return 0;
}