小弟不才,若有高手路過,請多指點,不勝榮幸!
話說,今日參加一家公司面試,要求實現如上如這種矩陣,初一看 ,就一矩陣,信誓旦旦的以爲很簡單呢,結果開始寫代碼的時候才發現這不是一般的矩陣,而是一隻蝸牛呀,直接昏倒!老實說,小弟當時被這隻蝸牛嚇到了,然後果斷放棄了,答了剩下的題。至於面試結果如何,且聽有機會的時候分解!
面試受挫,但我不能停止前進的腳步,歸來之後仔細研究了一下,發現瞭如下 規律:
如此圖所示,最外層的規律便是紅線所示的四組數組成的,哈 ,既然發現了規律 ,那麼繁瑣的工作就交給計算機來完成了,那麼,我就先嚥下第一口芥末嘍:
Step1:實現紅線1
首先,做些準備工作吧
1: int num=0;
2: Console.WriteLine("請輸入矩陣的長度:");
3: string getKeys= Console.ReadLine();
4: int.TryParse(getKeys, out num); //輸入數組長度
5: int[,] dataArray =new int[num,num];
6: int y=0; //設置初始值,線一開始位置 座標 x,y
7: int x=0;
8: int number=1; //蝸牛的起點
線1的實現就很簡單了,簡單的一個循環
1:
2: int startX = x;
3: int startY = y;
4: while (y < num-1)
5: {
6: dataArray[startX, y] = number;
7: number++;
8: y++;
9: }
Step2:實現整個外圍
後面的座標變化,還是直接上圖吧:
既然知道了座標是怎麼變化的,那麼就通過一些列的循環賦值吧!
1: int startX = x;
2: int startY = y;
3: while (y < num-1)
4: {
5: dataArray[startX, y] = number;
6: number++;
7: y++;
8: }
9: while (x < num - 1)
10: {
11: dataArray[x, y] = number;
12: number++;
13: x++;
14: }
15:
16: while (y > startX)
17: {
18:
19: dataArray[x, y] = number;
20: number++;
21: y--;
22: }
23: while (x > y)
24: {
25: dataArray[x, y] = number;
26: number++;
27: x--;
28: }
Step3:還你一顆真誠的心!
哈 ,原來內部也是有規律的 ,這個時候,是不是要遞歸一下呢?
1: private static int First(int num, int[,] dataArray, int y, int x, int number)
2: {
3:
4: int startX = x;
5: int startY = y;
6: #region 實現蝸牛的圍牆
7: while (y < num - 1)
8: {
9: dataArray[startX, y] = number;
10: number++;
11: y++;
12: }
13: while (x < num - 1)
14: {
15: dataArray[x, y] = number;
16: number++;
17: x++;
18: }
19:
20: while (y > startX)
21: {
22:
23: dataArray[x, y] = number;
24: number++;
25: y--;
26: }
27: while (x > y)
28: {
29: dataArray[x, y] = number;
30: number++;
31: x--;
32: }
33: #endregion
34: num -= 1;
35: startX++;
36: startY++;
37: if (num > 2)
38: {
39: return First(num, dataArray, startY, startX, number);
40: }
41: else
42: {
43: return 0;
44: }
45: }
如果,我輸入的是一個奇數呢?
此處只貼代碼了
if (num % 2 != 0)// 判斷矩陣長度是否爲奇數
{
dataArray[num / 2, num / 2] = num * num;
}