例:输入4 输出方阵如下:
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
第一种实现
using System;
class Program
{
enum Turn
{
Down, Right, Up, Left
};
static void Main(string[] args)
{
Console.Write("输入矩形长度(正整数):");
uint width;
while (!uint.TryParse(Console.ReadLine(), out width))
{
Console.Write("输入矩形长度(正整数):");
}
int[,] intArr = new int[width, width];
Turn turn = Turn.Down;
intArr[0, 0] = 1;
int i = 1, j = 0;
int num = 1;
int turnCount = 1;
while (num < width * width)
{
switch (turn)
{
case Turn.Down:
intArr[i, j] = ++num;
if (i == width - turnCount)
{
turn = (Turn)(((int)turn + 1) % 4);
j++;
break;
}
i++;
break;
case Turn.Right:
intArr[i, j] = ++num;
if (j == width - turnCount)
{
turn = (Turn)(((int)turn + 1) % 4);
i--;
break;
}
j++;
break;
case Turn.Up:
intArr[i, j] = ++num;
if (i == turnCount - 1)
{
turn = (Turn)(((int)turn + 1) % 4);
j--;
break;
}
i--;
break;
case Turn.Left:
intArr[i, j] = ++num;
if (j == turnCount)
{
turn = (Turn)(((int)turn + 1) % 4);
turnCount++;
i++;
break;
}
j--;
break;
}
}
for (int k = 0; k < intArr.GetLength(0); k++)
{
for (int z = 0; z < intArr.GetLength(1); z++)
{
Console.Write("{0,-4}", intArr[k, z]);
}
Console.WriteLine("\n");
}
}
}
第二种实现:
using System;
class Program
{
static void Main(string[] args)
{
Console.Write("请输入要输入的N*N矩阵的值 N:");
int n = int.Parse(Console.ReadLine());
int[,] a = new int[n, n];
int i = 0, j = 0;//二维数组的两个下标
int cout = 1;
int m = 0; //当前圈数
while (m < n / 2)//依次为每一圈得元素赋值
{
for (i = m, j = m; i < n - m - 1; i++)
a[i, j] = cout++;
for (j = m; j < n - m - 1; j++)
a[i, j] = cout++;
for (i = n - m - 1; i > m; i--)
a[i, j] = cout++;
for (j = n - m - 1; j > m; j--)
a[i, j] = cout++;
m++;
}
if (n % 2 != 0)//n为奇数的情况,为中间元素赋值
a[n / 2, n / 2] = n * n;
Console.WriteLine("该方阵如下所示:");//输出方阵
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (a[i, j] < 10)
Console.Write(" {0}", a[i, j]);
else
Console.Write(" {0}", a[i, j]);
}
Console.Write("\n\n");
}
Console.WriteLine("按任意键继续");
Console.ReadLine();
}
}