GEEK编程练习— —螺旋矩阵
来源:互联网 发布:it培训公司排名 编辑:程序博客网 时间:2024/05/16 04:58
今天开始,尽量每天一道实战编程题,不管题目新旧,总是可以考察你的编程基本功和思维。
题目
今天的题目是一道螺旋矩阵的题目,有的人也称回型矩阵、蛇形矩阵等,但其实都蛇形矩阵还有别的样式,请自行度娘~题目内容为输入一个正整数n,输出一个如下的螺旋矩阵
n=1的螺旋矩阵
1
n=2的螺旋矩阵
1 2
4 3
n=3的螺旋矩阵
1 2 3
8 9 4
7 6 5
n=4的螺旋矩阵
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
分析
可以看出一种规律,拿n=4当栗子,最外面一层,先从左向右1、2、3,然后从上到下4、5、6,再从右向左7、8、9,最后是从下往上10、11、12,接着按照这个规律进行内层循环。那么就可以把每层按照方向分成4组,每组分别进行赋值。特别是当n为奇数时,最内层是一个值,可以进行赋值。具体代码如下:
代码
//Helix Matrix//Date : 2016-04-03//Author :Sin_Geek#include <iostream>#include <vector>using namespace std;int main(){ int n; cin >> n; //输入矩阵的规模 //生产n*n矩阵 vector<vector<int>> a(n, vector<int>(n)); //l用来递增赋值,k表示从外往内数第几层 int k,l = 0; //对于n为奇数的矩阵,首先对中心元素赋值 if (n%2) a[n/2][n/2] = n*n; //按照分组所需要的循环次数 for (int i = 0; i < n * 2 - n % 2; ++i) { k = i/4; //分组内需要的循环次数 for(int j = 0; j < n - 2 * k -1; ++j) { ++l; switch(i%4) { case 0://上层 a[k][j + k] = l; break; case 1://右层 a[j + k][n - 1 - k] = l; break; case 2://下层 a[n - 1 - k][n - 1 - j - k] = l; break; case 3://左层 a[n - 1 - j - k][k] = l; break; } } } //按照矩阵形式输出 for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cout << a[i][j] << ends; } cout << endl; } return 0;}
1 0
- GEEK编程练习— —螺旋矩阵
- GEEK编程练习— —zigzag矩阵
- GEEK编程练习— —字符替换
- GEEK编程练习— —格雷码
- GEEK编程练习— —回文字符串
- GEEK编程练习— —字符串匹配
- GEEK编程练习— —通配符匹配
- GEEK编程练习— —有效数字
- GEEK编程练习— —罗马数字问题
- GEEK编程练习— —计数问题
- GEEK编程练习— —回文构词法
- GEEK编程练习— —反转整数
- GEEK编程练习— —回文整数
- GEEK编程练习— —最长回文子序列LPS
- GEEK编程练习— —数组去重
- GEEK编程练习— —旋转排序数组中的查找
- GEEK编程练习— —连续出现最多子串
- GEEK编程练习— —最长相同的子串
- 游戏引擎分析:FPS
- HDOJ 1385 Minimum Transport Cost
- 学习Python到写poc其实没那么难
- navicat for mysql mac彻底卸载
- 电脑 (PC) Android 模拟器 - Genymotion 上安装 apk
- GEEK编程练习— —螺旋矩阵
- Javascript模块化编程学习小结
- JavaScript JSON语法
- 两周来面试有感
- Android - ★★知识点
- Light OJ 1106 Gone Fishing (DP)
- CQUOJ F. 神秘的超级素数
- Side Effect与Sequence Point
- Linq to Entity 的问题