您的位置:首页 > 其它

腾讯笔试题:蛇形矩阵

2016-04-07 11:07 816 查看
题目: 蛇形矩阵,是由1开始的自然数一次排列成的N*N的正方形矩阵,数字依次由外而内的递增,如下面实例:

N=3时:

1 2 3

8 9 4

7 6 5

N=6时:

1 2 3 4 5 6

20 21 22 23 24 7

19 32 33 34 25 8

18 31 36 35 26 9

17 30 29 28 27 10

16 15 14 13 12 11

要求:输入蛇形矩阵宽度,输出蛇形矩阵结果。

将矩阵像剥洋葱一样,层层剥离,每一次循环为矩阵的这一层赋值,若矩阵宽度为偶数,则矩阵无心,若宽度为奇数,则矩阵有心(单独的一个数),对于这种情况需要单独处理。

#include<iostream>
using namespace std;

void print(int n)
{
int **matrix = new int*[n];//建立二维数组
for (int k = 0; k < n; k++)
{
matrix[k] = new int
;
}
int circle = 0;//循环次数
int v = 1;//矩阵初值
int i = 0, j = 0;
while (n-2*circle>=2)//以n-2*circle作为mark,若矩阵宽度为偶数,mark取到2时,矩阵赋值结束;若矩阵宽度为奇数,mark会取到1,此时需要单独处理。
{
for (j=circle; j < n-circle; j++)
{
matrix[i][j] = v;
v++;
}
j--;
i++;
for (i; i < n-circle; i++)
{
matrix[i][j] = v;
v++;
}
i--;
j--;
for (j; j >= circle; j--)
{
matrix[i][j] = v;
v++;
}
j++;
i--;
for (i; i > circle; i--)
{
matrix[i][j] = v;
v++;
}
i++;
circle++;
}
if (n-2*circle == 1)
{
j = circle;
matrix[i][j] = v;
}
for (i = 0; i < n; i++)//输出矩阵
{
for (j = 0; j < n; j++)
{
cout << matrix[i][j]<<" ";
}
cout << endl;
}
}
int main( )
{
int N;
cin >> N;
print(N);
return 0;
}


如下为运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: