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;
    }
    

      

  • 相关阅读:
    k8s-学习笔记12-权限体系
    Linux上磁盘热插拔
    delphi hashmap
    my gcc project
    gcc dll 导出问题 GTK+Glade3 Gtk-WARNING **: Could not find signal handler 问题最终解析
    c/c++字符串定义及使用的对比
    gcc printf()打印char* str
    gcc选项-g与-rdynamic的异同
    GCC编译,库的编译使用及Makefile
    gcc test
  • 原文地址:https://www.cnblogs.com/friedwm/p/2750767.html
Copyright © 2011-2022 走看看