zigzag数组
来源:互联网 发布:淘宝宝贝描述代码下载 编辑:程序博客网 时间:2024/05/18 03:02
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数组的值。这里面,最重要的就是确定每一步行进的方向,它和现在所在位置,以及上一步的方向有关。
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- Zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组的生成
- 求Zigzag数组
- 求zigzag数组矩阵
- 打印zigzag数组
- Zigzag数组的初始化
- zigzag数组和螺旋数组
- n*n的ZigZag数组
- n*n的ZigZag数组
- 编程珠玑第五章
- 我的 “child—>m_pParent ==0” 的异常
- static关键字
- python脚本生成器
- Hadoop 在百度的应用
- zigzag数组
- 简单正则表达式匹配字符串
- 如何自定义Intent.createChooser的显示结果
- android+ndk+Cygwin+cdt+sequoyah简要笔记
- 【String疑难解惑】面试题中常见的String类问题?
- n*n的ZigZag数组
- org.codehaus.groovy.grails.cli.support.GrailsStarter错误解决办法
- SOA,不看你永远不知道的事
- VMware 虚拟机不能上网三种方法分析