打印螺旋数

题目描述

下图是一个4阶的螺旋数阵:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
数字从1开始,沿着顺时针方向依次填满整个矩阵。
现在给你矩阵的规模n,请你输出n阶螺旋数阵。

输入描述:
输入包含多组数据,每组数据包含一个正整数n(1≤n≤20)。

输出描述:
对应每组数据,输出相应的螺旋数阵。

每组数据之后输出一个空行作为分隔。

输入例子:
3
4

输出例子:
1 2 3
8 9 4
7 6 5

1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

思路:先按顺序将数字填入一个二维数组中,然后,将二维数组打印出来即可。
填二维数组的思路就是按顺序呢,先横着天,然后竖着继续天,然后向左填,最后向上填,依次继续即可将所有要求的数填入二维数组中。
代码如下:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int matrix[21][21];
 6 
 7 int main()
 8 {
 9 	int n;
10 	while (cin >> n)
11 	{
12 		int sx = 0, sy = 0, ex = n - 1, ey = n - 1;
13 		int idx = 0;
14 
15 		while (true)
16 		{
17 			//横着从左到右
18 			for (int i = sy; i <= ey; ++i) 
19 			{ 
20 				matrix[sx][i] = ++idx; 
21 			} 
22 			++sx; 
23 			if (sx > ex)break;
24 
25 			//竖着从上到下
26 			for (int i = sx; i <= ex; ++i) 
27 			{ 
28 				matrix[i][ey] = ++idx; 
29 			} 
30 			--ey; 
31 			if (sy > ey)break;
32 
33 			//横着从右向左
34 			for (int i = ey; i >= sy; --i)
35 			{
36 				matrix[ex][i] = ++idx;
37 			}
38 			--ex;
39 			if (sx > ex)break;
40 
41 			//竖着从下到上
42 			for (int i = ex; i >= sx; --i)
43 			{
44 				matrix[i][sy] = ++idx;
45 			}
46 			++sy;
47 			if (sy > ey)break;
48 		}
49 
50 		for (int i = 0; i < n; ++i)
51 		{
52 			for (int j = 0; j < n; ++j)
53 			{
54 				cout << matrix[i][j];
55 				if (j != n - 1)cout << " ";
56 			}
57 			cout << endl;
58 		}
59 		cout << endl;
60 	}
61 	return 0;
62 }

本文遵从CC3.0协议转载请注明:转自凌风技术站

本文标题:打印螺旋数

本文链接地址:http://www.iaccepted.net/algorithm/42.html

相关文章



发表评论

电子邮件地址不会被公开。 必填项已用*标注