zoukankan      html  css  js  c++  java
  • 一道笔试题,螺旋打印序列

    题:输入一个数N,表示N*N的矩阵,矩阵的值为从1开始的自然数,且按行存储。要求按螺旋顺序,依次打印出矩阵中的值。

    例如:N=4时, 矩阵为:

    1  2  3  4

    5  6  7  8

    9  10 11 12

    13 14 15 16,

    打印的序列为: 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10。

    初步思路如下:

    //以大小固定的数组为例
    #include 
    using namespace std;
    
    const int arr_sz = 6;
    int array[arr_sz][arr_sz];
    
    void init_array(int array[arr_sz][arr_sz])
    {
        for(int i=0;i<< array[i][j];
                if(j==arr_sz-1)
                    cout << endl;
                else
                    cout << "\t";
            }
    }
    
    enum dir {lft, rt, dn, up};
    void pt_seq2(int array[][arr_sz], int total)
    {
        int i,j;
        i=j=0;
        dir direc = rt;
        int cnt = 0;
        /*
        right->down; down->lft; lft->up; up->rt;
        */
        while(cnt < total)
        {
            cout << array[i][j] << " ";
            array[i][j] = 0;
            cnt++;
            if(direc == rt)  //向右
            {
                if(j+1 < arr_sz && array[i][j+1] != 0)
                    j++;
                else
                {
                    direc = dn;
                    i++;
                }
            }
            else if(direc == dn)   //向下
            {
                if(i+1 < arr_sz && array[i+1][j] != 0)
                    i++;
                else
                {
                    direc = lft;
                    j--;
                }
            }
            else if(direc == lft)
            {
                if(j-1 >=0 && array[i][j-1] != 0)
                    j--;
                else
                {
                    direc = up;
                    i--;
                }
            }
            else if(direc == up)
            {
                if(i-1 && array[i-1][j] != 0)
                    i--;
                else
                {
                    direc = rt;
                    j++;
                }
            }
        }
    }
    int main()
    {
        init_array(array);
        pt(array);
    
        pt_seq2(array, arr_sz*arr_sz);
        return 0;
    }
    

      

  • 相关阅读:
    [洛谷P2783]有机化学之神偶尔会做作弊
    %你赛题解
    TCP协议中的三次握手和四次挥手(图解)
    堆,栈,内存
    java原生数据类型和引用类型
    XHTML 是以 XML 格式编写的 HTML
    TCP和UDP?
    HTTP和HTTPS的区别?
    <!DOCTYPE> 声明
    ASCII和万国码
  • 原文地址:https://www.cnblogs.com/friedwm/p/2750767.html
Copyright © 2011-2022 走看看