基礎練習 回形取數(藍橋杯)


注:一定,一定要注意在取數過程中,控制循環的各個變量的變化。還有就是記得在取數過程中,將取過的數進行標記,避免重復取數。

#include <iostream>
using namespace std;
int main()
{
    int m,n,i,j,x,y,top;
    cin>>m>>n;int a[m][n];
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            cin>>a[i][j];
        }
    }
    top=0;x=0;y=0;
    while(top<m*n)//當取出m*n個數時,循環結束 
    {
        while(x<m&&a[x][y]!=-1)
        {
            cout<<a[x][y]<<" ";
            a[x][y]=-1;//在取數過程中將取過的數進行標記,防止重復取數 
            top++;
            x++;
        }//down
        x--;y++;//在跳出循環時,x=m所以將x-1,因為y=0時的數以取過,所以y+1,向右開始取數 
        while(y<n&&a[x][y]!=-1)
        {
            cout<<a[x][y]<<" ";
            a[x][y]=-1;
            top++;
            y++;
        }//right
        x--;y--;//同理,此時開始向上取數。所以x-1,y跳出循環時y=n,所以此時y-1 
        while(x>=0&&a[x][y]!=-1)
        {
            cout<<a[x][y]<<" ";
            a[x][y]=-1;
            top++;
            x--;
        }//up
        x++;y--;//同理,開始向左取數。。。 
        while(y>=0&&a[x][y]!=-1)
        {
            cout<<a[x][y]<<" ";
            a[x][y]=-1; 
            top++;
            y--;
        }//left
        x++;y++;//外層數已經取完,開始向內層進軍。此時進軍方式,x+1,y+1; 
    }
    return 0;
}
View Code

PS:還在進擊中,所以代碼寫的沒啥水平ε=(´ο`*)))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM