您的位置:首页 > 其它

螺旋矩阵

2016-04-03 21:16 344 查看
刚刚做完tencent的实习生招聘笔试。两个小时,第一小时是30道客观不定项选择,考的很全面也挺基础,数据结构、网络、OS、数据库、C、JAVA……【然并卵,并不会。第二个小时是一道简答三道编程。简答问的是stack和heap的区别,编程是一道SQL,两道算法。其实应该都很简单,然而还没学SQL所以放弃了。尽管如此还是只完成了一道,螺旋矩阵。另一道可删除寻找回形文,以前做过回形文的题目,但是没有可以删除的条件,然而开始做的时候已经没有时间了……sad,还是自己太弱。

看了一下网上有的螺旋矩阵的算法,好像和我想的不太一样,所以趁着还能记得写下来一点。

螺旋矩阵,就是类似下面这样的矩阵,输入行(列)数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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: