机试题螺旋矩阵C++实现
来源:互联网 发布:生产许可证编号 淘宝 编辑:程序博客网 时间:2024/04/27 07:30
一次机试的时候碰到了一个这样的题目,当时却没有做出来,现在想想当时还是紧张了题目:输入一个整数n,要求能够打印出一个这样的矩阵,以n=5为例,输出如下矩阵
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9可以发现,当n为奇数的时候,“回”形圈有(n+1)/ 2个,当n为偶数的时候,“回”形圈有n / 2个,这个矩阵是顺时针转的,这里比较简单的处理是按照每一圈进行处理。每一圈有四个过程,首先是上面的向右走,到了边界停下,然后是向下走,到了边界停下,然后向左,向上。这里的边界与圈数有关,第 i 圈的边界为n-circle,circle为圈数。并且在处理完上面的一行之后,即1 2 3 4 5,再处理右边的边界5 6 7 8 9时,第一个元素已经处理完了,这里要注意一下。
代码实现
#include<iostream> #include<time.h> using namespace std; void Sprialarr(int n) { int i; int **a = new int*[n]; for(i = 0;i < n;i++) a[i] = new int[n]; int circle = 0; int col =0 ,raw = 0, k = 1; while(circle < (n + 1) / 2) { for(;col < n - circle;col++)//处理上面的一行 a[raw][col] = k++; col--;//col此时等于n - circle,需要减1保持在边界上 k--;// for(;raw < n - circle;raw++)//处理右边的一行 a[raw][col] = k++;//第一个数重复赋值了,所以上面的k要减一个 raw--; k--; for(;col >= circle;col--)//处理下面的一行 a[raw][col] = k++; col++; k--; for(;raw > circle;raw-- )//处理左边的一行 a[raw][col] = k++; raw++; k--; circle++; } for(raw = 0;raw < n;raw++) { for(col = 0;col < n ;col++) { cout<<a[raw][col]<<" "; } cout<<endl; } for(i = 0;i < n;i++) delete [] a[i]; delete [] a; } void test() { int n; cout<<"Input the number n"<<endl; cin>>n; Sprialarr(n); } int main() { test(); return 0; }
0 0
- 机试题螺旋矩阵C++实现
- 螺旋矩阵(c实现)
- 螺旋矩阵的C实现
- 螺旋矩阵C语言实现
- 螺旋矩阵(c语言实现)
- 面试题-螺旋矩阵
- [C++] 螺旋矩阵
- 螺旋矩阵编程实现
- java 实现螺旋矩阵
- java实现螺旋矩阵
- 螺旋矩阵实现
- 螺旋矩阵的实现
- 面试题之螺旋矩阵
- 螺旋矩阵(C语言实现)- 2016.01.04
- PAT Basic 1050. 螺旋矩阵(25)(C语言实现)
- PHP实现螺旋矩阵(螺旋数组)
- C语言输出螺旋矩阵
- C语言生成螺旋矩阵
- 我要写代码——成为程序员的门槛(1)
- 10 进制数转化成10以内任意进制数
- c罕见语法
- poj 1379 Run Away
- Gradle----Groovy
- 机试题螺旋矩阵C++实现
- Intel MKL基础(3)MKL函数分类
- 静态代码分析工具汇总
- 【java】注册功能动态验证码的生成和验证(完整图片验证码封装工具类)
- Linux makefile 教程
- 2016.03.11
- 二维有序数组中查找
- Java IO最详解
- Intel MKL基础(2)MKL的分层结构Layered Model Concept