先简要的讲下思路: 螺旋数组因为数组的排列像一个海螺所以就被称作螺旋数组(讲点废话,这个是我杜撰的)大体的形状就如图片所显示的,那好下面我们就开始画圈圈,每一圈可以看作四步:第一 先把上面的边画出来,第二 把右边的边画出来, 第三 把下边的边画出来 ,第四 把左边的边画出来。画玩第一个圈,接着画里面的一个圈,第一。。。第二 。。第四。。画完之后去里面没有圈了。然后再画里面的里面的圈,直到画不动了(超出了数组的最大索引量)再停下来;嗯 思路就是这么个思路,下面是贴代码的时候:
1 static void Main(string[] args) 2 { 3 Console.WriteLine("请输入大于1的正整数:"); 4 int n = 0; 5 try 6 { 7 string read = Console.ReadLine(); 8 9 n = Int32.Parse(read); 10 11 if (n <= 1) 12 { 13 Console.WriteLine("请输入正确的正整数:"); 14 } 15 } 16 catch 17 { 18 Console.WriteLine("请输入正确的正整数:"); 19 } 20 21 22 byte[,] b = new byte[n, n]; 23 24 byte result = 1; //输出的起始结果为1 25 26 int itemN = n - 1; //要输出多少条线 27 28 for (int m = 0; m < n / 2f; m++) 29 { 30 if (itemN > 0) 31 { 32 //输出顶线 33 for (int i = 0; i < itemN; i++) 34 { 35 b[m, i + m] = result; 36 result++; 37 } 38 //输出右边线 39 for (int i = 0; i < itemN; i++) 40 { 41 b[i + m, itemN + m] = result; 42 result++; 43 } 44 //输出底线 45 for (int i = itemN; i > 0; i--) 46 { 47 b[itemN + m, i + m] = result; 48 result++; 49 } 50 //输出左线 51 for (int i = itemN; i > 0; i--) 52 { 53 b[i + m, m] = result; 54 result++; 55 } 56 //减去两条线 57 itemN -= 2; 58 } 59 else 60 { 61 b[m, m] = result; 62 } 63 } 64 65 for (int i = 0; i < n; i++) 66 { 67 Console.WriteLine(); 68 for (int j = 0; j < n; j++) 69 { 70 Console.Write(b[i, j].ToString().PadRight(10)); 71 } 72 } 73 Console.Read();
以上是看到一道面试题感觉有点意思于是研究了下。因最近在学习写邮件,发现自己文笔与表达太差。所以就写下此文,以锻炼文笔。即当作练习,也当作以后鄙视现在的证据。大家如果感觉幼稚请轻喷
时间: 2024-10-28 16:00:07