zoukankan      html  css  js  c++  java
  • zigzag数组

    写在前面:在《程序员面试宝典》看到的例题:输入N,用C++生成N*N的zigzag数组,并打印出来。书上给了实现代码,http://www.cnblogs.com/lovell-liu/archive/2011/09/19/2181598.html也有很好的实现代码,当然我自己也实现了。


    先贴代码

    /*
    zigzag数组是一个“之”字形排列的数组,如8*8的zigzag数组: 
         0     1     5     6    14    15    27    28
         2     4     7    13    16    26    29    42
         3     8    12    17    25    30    41    43
         9    11    18    24    31    40    44    53
        10    19    23    32    39    45    52    54
        20    22    33    38    46    51    55    60
        21    34    37    47    50    56    59    61
        35    36    48    49    57    58    62    63
    */
    
    #include <iostream>
    #include <vector>
    #include <iomanip>
    
    using namespace std;
    
    int main()
    {
        int N;
        int s,i,j,dir;
        int squa;
        cout<<"将要实现N*N的zigzag矩阵,请输入N([1 100]):";
        cin>>N;
    
    vector<vector<int> > a(N,vector<int>(N)); squa=N*N; i=0; // j=0; // s=0; //计数 dir=0//四个行进方向0(right),1(left_down),2(down),3(right_up) while(s<squa) { //数组赋值 a[i][j]=s; //设置下一点(位置和方向) switch(dir) { case 0: //位置 j++; //行进方向 if(0==i) dir=1; if(N-1==i) dir=3; break; case 1: i++; j--; if(N-1==i) dir=0; else if(0==j) dir=2; break; case 2: i++; if(0==j) dir=3; if(N-1==j) dir=1; break; case 3: i--; j++; if(N-1==j) dir=2; else if(0==i) dir=0; break; default: break; } s++; } cout<<"*************************************************************"<<endl; cout<<N<<"*"<<N<<"的zigzag矩阵:"<<endl; for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<setw(6)<<a[i][j]; cout<<endl; } cout<<"按任意键继续……"; cin.clear(); cin.sync(); cin.get(); return 0; }

    可以看到,我的思路就在一个while循环里面:从左上角开始,沿着“之”字形路线,一步步设置zigzag数组的值。这里面,最重要的就是确定每一步行进的方向,它和现在所在位置,以及上一步的方向有关。


    结束语:写完了,不知道我的代码和其他人的实现代码相比,效率怎么样?但是至少思路是清晰的,是吧

  • 相关阅读:
    and &&区别
    redis服务意外停止
    shell基础之bash
    vbox的桥接网络
    apache安装及相应配置
    https服务器配置部署
    nginx + php + mysql安装、配置、自启动+redis扩展
    VirtualBox安装linux
    本地检出远程分支
    linux下的crontab安装及简单使用
  • 原文地址:https://www.cnblogs.com/emituofo/p/2607179.html
Copyright © 2011-2022 走看看