螺旋矩阵
2016-04-03 21:16
344 查看
刚刚做完tencent的实习生招聘笔试。两个小时,第一小时是30道客观不定项选择,考的很全面也挺基础,数据结构、网络、OS、数据库、C、JAVA……【然并卵,并不会。第二个小时是一道简答三道编程。简答问的是stack和heap的区别,编程是一道SQL,两道算法。其实应该都很简单,然而还没学SQL所以放弃了。尽管如此还是只完成了一道,螺旋矩阵。另一道可删除寻找回形文,以前做过回形文的题目,但是没有可以删除的条件,然而开始做的时候已经没有时间了……sad,还是自己太弱。
看了一下网上有的螺旋矩阵的算法,好像和我想的不太一样,所以趁着还能记得写下来一点。
螺旋矩阵,就是类似下面这样的矩阵,输入行(列)数n,输出一个n*n的矩阵。
其实是很简单自然的想法,就是按照数字增大的方向逐个赋值。
看了一下网上有的螺旋矩阵的算法,好像和我想的不太一样,所以趁着还能记得写下来一点。
螺旋矩阵,就是类似下面这样的矩阵,输入行(列)数n,输出一个n*n的矩阵。
其实是很简单自然的想法,就是按照数字增大的方向逐个赋值。
#include <iostream> using namespace std; #define M 100 int ans[M][M]; int main() { int n; //输入行列数 cin>>n; int i,j,k=1; int num=2*n-1; //总共要执行的次数 int time=1; //当前要执行的次数 int forward=0,down=0,back=0,up=0; //执行时的方向及次数 while(time<=num) { switch(time%4){ case 1: { for(i=forward;i<n-forward;i++) ans[forward][i]=k++; time++; forward++; break; } case 2: { for(i=1+down;i<n-down;i++) ans[i][n-1-down]=k++; time++; down++; break; } case 3: { for(i=n-2-back;i>-1+back;i--) ans[n-1-back][i]=k++; time++; back++; break; } case 0: { for(i=n-2-up;i>up;i--) ans[i][up]=k++; time++; up++; break; } } } for(i=0;i<n;i++) { for(j=0;j<n;j++) cout<<ans[i][j]<<" "; cout<<endl; } return 0; }
相关文章推荐
- 概率论与数量统计(二)2___ 随机事件与概率
- 服务器端如何开启GZIP压缩功能
- java程序的加载过程
- 欧氏距离的矩阵实现(k近邻分类器)
- CentOS 6.4安装图形界面并用VNC远程连接
- 双向链表
- 虚拟文件系统(VFS)
- 用Objective-C写了一个简单的批量更改文件名的程序
- Dijkstra TYVJ 1031热浪 Dijkstra测试数据
- POJ 2524 (并查集)
- 腾讯测试
- Dijkstra TYVJ 1031热浪 Dijkstra测试数据
- Sublime Text 3专题
- 生产者和消费者
- 详解https是如何确保安全的?
- 【HDU5656】CA Loves GCD,容斥思想与乱搞
- [查异常网]-20160403-程序员总结:帮助你早些明白一些道理
- LeetCode 之 5 ---- Longest Palindromic Substring
- 朴素贝叶斯分类及两个模型
- ON_MESSAGE,ON_COMMAND和ON_NOTIFY的区别和联系