前几天做小米的笔试题,遇到一个蛇形数组的题目,让你编程输出如下类似的蛇形矩阵
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
#include<iostream>
using namespace std;
#define N 15
int mat[N][N];
int all;
void getLayer(int x,int y) //根据下标的规律,一层一层输出
{
int a=y,b=x;
mat[x][y]=all++;
if(x>a)
{
while(x!=a)
{
x--;
y++;
mat[x][y]=all++;
}
}
else
{
while(x!=a)
{
x++;
y--;
mat[x][y]=all++;
}
}
}
void changeLayer(int x,int y) //每次输出一层,则转下一层
{
while(x<=N-1&&y<=N-1)
{
if(x<N-1&&y==0)
x++;
else if(x==0&&y<N-1)
y++;
else if(x==N-1&&y<N-1)
y++;
else if(x<N-1&&y==N-1)
x++;
getLayer(x,y);
if(x==N-1&&y==N-1)
break;
int tmp=x;
x=y;
y=tmp;
}
}
int main()
{
mat[0][0]=1;
mat[0][1]=2;
mat[1][0]=3;
all=4;
changeLayer(1,0);
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
cout<<mat[i][j]<<" ";
cout<<endl;
}
return 0;
}