簡單的解析下螺旋數組


 

先簡要的講下思路: 螺旋數組因為數組的排列像一個海螺所以就被稱作螺旋數組(講點廢話,這個是我杜撰的)大體的形狀就如圖片所顯示的,那好下面我們就開始畫圈圈,每一圈可以看作四步:第一 先把上面的邊畫出來,第二 把右邊的邊畫出來, 第三 把下邊的邊畫出來 ,第四  把左邊的邊畫出來。畫玩第一個圈,接着畫里面的一個圈,第一。。。第二 。。第四。。畫完之后去里面沒有圈了。然后再畫里面的里面的圈,直到畫不動了(超出了數組的最大索引量)再停下來;嗯 思路就是這么個思路,下面是貼代碼的時候:

 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();
View Code

 

以上是看到一道面試題感覺有點意思於是研究了下。因最近在學習寫郵件,發現自己文筆與表達太差。所以就寫下此文,以鍛煉文筆。即當作練習,也當作以后鄙視現在的證據。大家如果感覺幼稚請輕噴

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM