腾讯笔试题:蛇形矩阵
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
要求:输入蛇形矩阵宽度,输出蛇形矩阵结果。
将矩阵像剥洋葱一样,层层剥离,每一次循环为矩阵的这一层赋值,若矩阵宽度为偶数,则矩阵无心,若宽度为奇数,则矩阵有心(单独的一个数),对于这种情况需要单独处理。
如下为运行结果:
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; }
如下为运行结果:
相关文章推荐
- VirtualBox中使用双网卡实现CentOS既能上网(校园网)也能使用SSH客户端
- 使用ngx_lua构建高并发应用(2)
- Javascript的this用法
- 使用openframeworks无需配置学习新版本opengl
- 杂
- 【剑指offer系列】 斐波那契数列___9
- 4.5 小结:master目录各程序的用途
- 素质与修养
- Caffe使用step by step:faster-rcnn目标检测matlab代码
- PHP导出数据到CSV文件
- Gson转换json串到Map,Key值是String还是设定值(如Long)?
- Django1.6 用Form实现注册登录注销修改密码
- 操作系统不兼容导致的arm-none-linux-gnueabi-gcc:not found
- hdu 5652 India and China Origins 并查集
- 移动开发之viewport的深入理解
- c++第三次上级实验
- 4.4.3 single_server_wakeup函数:执行业务模块回调函数
- spring配置
- Exception from HRESULT: 0x80070057 (E_INVALIDARG)
- C# winform 弹出确认消息框