題目:
在n × n 方陣裡填入1,2,...,n × n。要求填成蛇形。例如,n = 4時方陣為:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方陣中,多餘的空格只是為了便於觀察規律,不必嚴格輸出。 n <= 8。
思路:由題目可知,矩陣為方陣,因此用二維陣列儲存,同時將所有位置的值初始化為 0。
可將矩陣看成直角座標系,並設每個數字座標為(x , y),對應到二維陣列的下標上。
假設當前位置為 「筆」 的位置,開始時,「筆」 在最右上角,座標為(0 , n - 1) ,分析可得,「筆」 的移動軌跡為 先向下移動,再向左移動,再向上移動,再向右移動。整體上按照這4種方式,迴圈移動,必須注意,移動的先後次序不能顛倒。
舉例來說,「筆」 一開始在最右上角,先填寫數字,再向下移動,邊移動邊填寫數字。
那麼怎麼判斷該改變方向了呢?當向下移動時,先判斷是否越過邊界,再判斷下乙個位置是否被寫過(沒有被寫過的格仔值仍然是0, 被寫過的格仔值為數字),這樣依次判斷,直到 「筆」 應寫的值超過格仔數。
**:
#includeusing namespace std;
const int maxn = 20;
int matrix[maxn][maxn];
int main()
}pencil = matrix[x][y] = 1;
while (pencil < n * n)
while (y - 1 >= 0 && !matrix[x][y - 1])
while (x - 1 >= 0 && !matrix[x - 1][y])
while (y + 1 < n && !matrix[x][y + 1])
}for (int i = 0; i < n; ++i)
cout << endl;
}return 0;
}
C 蛇形填數
蛇形填數 問題描述 在n n方陳裡填入1,2,n n,要求填成蛇形。例如n 4時方陳為 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 輸入直接輸入方陳的維數,即n的值。n 100 輸出輸出結果是蛇形方陳。問題分析 我們定義乙個二維陣列,開始x 0,y n 1,即第一行...
NYoj 蛇形填數
描述 在n n方陳裡填入1,2,n n,要求填成蛇形。例如n 4時方陳為 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 輸入 直接輸入方陳的維數,即n的值。n 100 輸出輸出結果是蛇形方陳。樣例輸入 3 樣例輸出 7 8 1 6 9 2 5 4 3 include ...
acm 蛇形填數
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 在n n方陳裡填入1,2,n n,要求填成蛇形。例如n 4時方陳為 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 輸入直接輸入方陳的維數,即n的值。n 100 輸出輸出結果是蛇形方陳。樣例輸入 3...