題目: 輸入乙個正整數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個數,為輸入矩陣回形取數得到的結果。數之間用...