藍橋 BASIC 25 回型取數

2021-10-03 08:17:28 字數 1870 閱讀 4569

問題描述回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。

輸入格式

輸入第一行是兩個不超過200的正整數m, n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。

輸出格式

輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用乙個空格分隔,行末不要有多餘的空格。

樣例輸入

3 31 2 3

4 5 6

7 8 9

樣例輸出

1 4 7 8 9 6 3 2 5

樣例輸入

3 21 2

3 45 6

樣例輸出

1 3 5 6 4 2

我一開始的思路是每取完矩陣中的元素,用乙個符號代替數字,當指標檢測到字元時,便終止迴圈。但在編碼過程中發現實現有些困難。隨後我觀察矩陣特性,發現每行(列)輸出的字元數都比上次少乙個字元。利用這個特點編碼就較為容易了。

對於上圖的矩陣,根據題意,首先輸出1,6,11三個數。其數量剛好等於矩陣行數;而後輸出12,13,14,15四個數。其數量等於矩陣列數-1.而後是10,5兩個數。數量等於行數-1。以此類推。可將矩陣的輸出分為幾個階段,分別輸出3,4,2,3,1,2個字元。當輸出完最後一行8,9兩個數之後,矩陣應該向上選取數字輸出,而此時待輸出行數已經等於0(即輸出完每一行後經過-1操作的行數),所以跳出迴圈,輸出結束。

#include

using

namespace std;

intmain()

;for

(i=0

;i)for

(j=0

;j) cin >> a[i]

[j];

i = j =0;

row = m;

if(row >=0)

row--

; i--;}

column = n -1;

while

(row >=

0&& column >=0)

column--;if

(row <

0|| column <0)

break

;for

(int k =

0;k < row;k++

)//向上

row--;if

(row <

0|| column <0)

break

;for

(int k =

0;k < column;k++

)//向左

column--;if

(row <

0|| column <0)

break

;for

(int k =

0;k < row;k++

)//向下

row--;if

(row <

0|| column <0)

break;}

return0;

}

本題暴露出我考慮不周到的問題,一開始只考慮到行列數相等的矩陣。這樣編出的**就會比較特殊,而不能包括更加一般的情況。

藍橋 BASIC 25 回形取數

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

藍橋杯 BASIC 25 基礎練習 回形取數

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

BASIC 25 基礎練習 回形取數

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