static void Main(string[] args)
{
Console.Write("请输入正整数:");
int n = int.Parse(Console.ReadLine()); //读取输入
Console.WriteLine();
int[,] arr = GetSpiralMatrix(n);
//输出矩阵
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.Write("{0,4}", arr[j, i]); //字符占4位,右对齐
}
Console.WriteLine();
}
Console.ReadKey();
}
/// <summary>
/// 获取螺旋矩阵输出的方法
/// </summary>
static int[,] GetSpiralMatrix(int row)
{
int[,] intArr = new int[row, row]; //定义行列为row的矩阵
int x = row % 2 == 0 ? row / 2 - 1 : row / 2; //计算初始x,y坐标在正中间
int y = x; //初始坐标x与y相等
int m = 1;
int n = 0;
string type = "R"; //初始方向为右
for (int i = 1; i <= row * row; i++)
{
intArr[x, y] = i;
switch (type)
{
case "R": //向右
x++;n++;
if (m == n) { type = "D";n = 0; }
break;
case "D": //向下
y++;n++;
if (m == n) { m++; type = "L";n = 0; }
break;
case "L": //向左
x--;n++;
if (m == n) { type = "U";n = 0; }
break;
case "U": //向上
y--;n++;
if (m == n) { m++; type = "R";n = 0; }
break;
}
}
return intArr;
}