C語言 回形方陣做題思路

2021-10-21 02:44:45 字數 928 閱讀 8360

題目: 輸入乙個正整數n,輸出n×n的回形方陣。例如,n=5時,輸出:

1 1 1 1 1

1 2 2 2 1

1 2 3 2 1

1 2 2 2 1

1 1 1 1 1

輸入:一行乙個正整數n,2≤n≤9​。

輸出:​ 共n行,每行包含nn個正整數,之間用乙個空格隔開。

思路:輸出為乙個矩陣,可以將其儲存在乙個二維陣列num[n][n]中;觀察可知——陣列中最大的數為n/2的上取整數即k = ceil((double)n/2);

接下來可以開始給矩陣元素賦值。如何去賦值,先觀察,找規律:

最外層都是1,則可認為

for(int i = 0;i < n;i++)
至此,我們把最外層賦值做好了。在往裡面延申,第二層

for(int i = 0;i < n;i++)
完成這步之後能看出有重複賦值的地方,比如num[1][0],num[0][1];由於這兩個位置的期望值是1,故可以先做第二層的賦值,再做第一層的賦值。至此我們應該能看出一些規律來了,i不變,把賦值改為乙個遞減量j:

for(int j = k;j > 0;j--)
拿幾個數來驗證一下,發現沒什麼問題。

最後,整合成完整**:

#include #include int main()	

} for(int i = 0;i < n;i++)

printf("\n");

} return 0;

}

至此,這道題目,完成。

題目比較的簡單,僅僅是為了記下一些筆記和思路,重點是自己慢慢找到了去找規律解題的感覺。題目沒有標準答案,有興趣的朋友如果有更好的方法也不妨一起討論下哈。

C語言 回形取數

基礎練習 回形取數 時間限制 1.0s 記憶體限制 512.0mb 問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格...

c語言回形取數

問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用...

藍橋杯 回形取數 C語言

問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用...