藍橋杯練習系統 基礎練習 回形取數(C++)
阿新 • • 發佈:2018-12-17
問題描述
回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。
輸入格式
輸入第一行是兩個不超過200的正整數m, n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。
輸出格式
輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用一個空格分隔,行末不要有多餘的空格。
樣例輸入
3 3 1 2 3 4 5 6 7 8 9
樣例輸出
1 4 7 8 9 6 3 2 5
樣例輸入
3 2 1 2 3 4 5 6
樣例輸出
1 3 5 6 4 2
#include<iostream> using namespace std; int main() { int m,n,i,j,t=0; cin>>m>>n; int **ferry; //給二維陣列開空間 ferry=new int*[m]; for(i=0;i<m;i++) { ferry[i]=new int[n]; } //輸入二維陣列 for(i=0;i<m;i++) { for(j=0;j<n;j++) { cin>>ferry[i][j]; } } //回形演算法 i=0; j=0; cout<<ferry[i][j]; ferry[i][j]=-1; while(t<m*n) { while(i+1<m&&ferry[i+1][j]!=-1)//↓ { cout<<" "<<ferry[++i][j]; ferry[i][j]=-1; t++; } while(j+1<n&&ferry[i][j+1]!=-1)//→ { cout<<" "<<ferry[i][++j]; ferry[i][j]=-1; t++; } while(i-1>=0&&ferry[i-1][j]!=-1)//↑ { cout<<" "<<ferry[--i][j]; ferry[i][j]=-1; t++; } while(j-1>=0&&ferry[i][j-1]!=-1)//← { cout<<" "<<ferry[i][--j]; ferry[i][j]=-1; t++; } if(t==m*n-1)break; } system("pause"); return 0; }