方阵
题目:输入一个奇数n,打印出n行n列的方阵,要求同行同列同对角线相加都相等。
列如:输入3,打印出下列方阵
8 1 6
3 5 7
4 9 2
代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 namespace Test2 6 { 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 int n; 12 Console.WriteLine("请?输º?入¨?一°?个?奇?数ºy:êo"); 13 n = Convert.ToInt32(Console.ReadLine()); 14 //判断n维数组的奇偶性 15 if (n % 2 == 0) 16 { 17 Console.WriteLine("输入有误,请输入一个正奇数"); 18 n = Convert.ToInt32(Console.ReadLine()); 19 } 20 21 int[,] a = new int[n, n]; //定义一个n*n阶的二维数组 22 //将每个宫格的数据都赋值为0 23 for (int a1 = 0; a1 < n; a1++) 24 for (int a2 = 0; a2 < n; a2++) 25 { 26 a[a1, a2] = 0; 27 } 28 //将第一行,中间一列的空赋值为1 29 a[0, n / 2] = 1; 30 int b1 = 0, b2 = n / 2; 31 //像宫格中填数,规则是右边一列,下面2行为下一个数出现的位置。 32 for (int b3 = 2; b3 <= n * n; b3++) 33 { 34 //0代表宫格中没有填充,所以判断下一个要填充的位置是否0 if (a[(b1 + 2) % n, (b2 + 1) % n] == 0) 35 { 36 a[(b1 + 2) % n, (b2 + 1) % n] = b3; 37 b1 = (b1 + 2) % n; 38 b2 = (b2 + 1) % n; 39 } 40 else 41 { 42 a[(b1 + 1) % n, b2 % n] = b3; 43 b1 = (b1 + 1) % n; 44 } 45 } 46 //打印出填好数的数组 47 for (int a1 = 0; a1 < n; a1++) 48 { 49 for (int a2 = 0; a2 < n; a2++) 50 { 51 Console.Write(a[a1, a2] + "\t"); 52 } 53 Console.WriteLine(); 54 } 55 Console.Read(); 56 } 57 } 58 }