c#魔方阵(易于理解版)
核心思想
⑴ 将1放在第一行中间一列
⑵ 从2开始直到n×n止各数依次按下列规则存放:
每一个数存放的行比前一个数的行数 -1,列数 +1
⑶ 如果上一个数的行数为1,下一个数的行数应为n,即最后一行 //理解为封闭环形
⑷ 如果上一个数的列数为n,下一个数的列数应为1,即第一列 //理解为封闭环形
⑸ 如果按上面规则确定的位置上已有数,则把下一个数放在上一个数的下面
以下是代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp24
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("输入奇数:");
int num = int.Parse(Console.ReadLine());
int[,] arr = new int[num, num];
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
arr[i, j] = 0;
}
}
int currNum = 1;
int x = 0;
int y = num/2;
arr[x, y] = currNum;
while (currNum<num*num)
{
int tx = x;
int ty = y;
if (x == 0)
{
x = num - 1;
}
else
{
x--;
}
if (y == num-1)
y = 0;
else
{
y++;
}
if (arr[x, y] != 0)
{
//回到下面位置
x = tx+1;
y = ty;
}
arr[x, y] = ++currNum;
}
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.Write(arr[i,j]);
}
Console.WriteLine();
}
Console.ReadKey();
}
}
}
Console.ReadKey(); } }}