這是記錄我做的一道關於蛇形矩陣的文章
【問題描述】
將1,2,…,n*n個自然數,按蛇形方式存放在二維陣列a[n][n]中。「蛇型」方式,即是按「副對角線」平行的各對角線,從左下到右上,再從右上到左下,存放n2個整數。例如:
1 3 4
2 5 8
6 7 9
【輸入形式】 輸入陣列的階數n。
【輸出形式】 列印資料元素按蛇形排列的陣列,整數列印的域寬為4。
【樣例輸入】3
【樣例輸出】
1 3 4
2 5 8
6 7 9
【樣例說明】矩陣的階數為3,列印按蛇形存放的1~9,注意域寬為4。
首先一開始,我就開始猜規律,妄想用一種規律來解這道題目。很長很長時間後??,發現這似乎不現實。然後我仿著大腦的思路,試**決這道問題,結果就解決了。猛然之間有了一種「程式設計就是仿照人的思路告訴計算機怎麼做的過程」感悟。
我們來看樣例,發現可以有第一次列印1個,,第二次列印兩個,第三次列印3個,第四次列印2個,第五次列印1個這樣的規律。這樣就可以用for迴圈控制列印個數。
然後,每一次列印分為兩種狀態,分別是上行,下行。也就是左下到右上,右上到左下。這樣我們可以定義乙個記錄狀態的變數。並且我們還發現。上行和下行是交替進行的。這就相當於解決了一大半問題。
最後乙個問題,如何解決第一次到第二次這樣的過度呢。我們發現其實一共有兩種過度。一種是向下。一種是向右,這樣我們定義兩種狀態。這兩種狀態也是交替進行的。等等,好像不是,發現如果到了右上角的元素,下乙個狀態不會改變,再找一找還有沒有例外,。。。。。沒了。於是,我們就可以針對這種例外做乙個判斷。
之後,這道題目就做出來了。?
#include
intmain()
else
if(state ==
2&& j!=i)}if
(state ==1)
else
if(flag ==
1&& w == n-1)
if(flag ==
0&& q == n-1)
if(flag ==0)
else
}for
(i = n-
1; i >=1;
--i)
else
if(state ==
2&& j!=i)}if
(state ==1)
else
if(flag ==
1&& w == n-1)
if(flag ==
0&& q == n-1)
if(flag ==0)
else
}for
(i =
0; i < n;
++i)
printf
("\n");
}return0;
}
螺旋矩陣 蛇形矩陣
問題描述 給定乙個包含m行n列的m x n矩陣,程式設計按照螺旋順序,輸出該矩陣中的所有元素。輸入有多個矩陣。每個矩陣資料的第1行有兩個整數m和n,接著是乙個mxn矩陣的描述,有m行,每行有n個整數 輸出對每個矩陣資料,按照螺旋順序輸出矩陣陣列的元素。輸入樣例 3 31 2 3 4 5 6 7 8 ...
蛇形矩陣的解答
小明玩乙個數字遊戲,取個n行n列數字矩陣 其中n為不超過100的奇數 數字的填補方法為 在矩陣中心從1開始以逆時針方向繞行,逐圈擴大,直到n行n列填滿數字,請輸出該n行n列正方形矩陣以及其的對角線數字之和.n 即n行n列 n 1行,n行為組成的矩陣,最後一行為對角線數字之和 3 5 4 3 6 1 ...
蛇形矩陣的輸出
題目描述 蛇形矩陣是由1開始的自然數依次排列成的乙個矩陣上三角形。輸入 本題有多組資料,每組資料由乙個正整數n組成。n不大於100 輸出 對於每一組資料,輸出乙個n行的蛇形矩陣。兩組輸出之間不要額外的空行。矩陣三角中同一行的數字用乙個空格分開。行尾不要多餘的空格。樣例輸入 5樣例輸出 1 3 6 1...