蛇形矩陣的建立

2021-10-06 07:15:11 字數 1424 閱讀 5983

這是記錄我做的一道關於蛇形矩陣的文章

【問題描述】

將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...