求解n阶螺旋矩阵问题

【问题描述】创建n阶螺旋矩阵并输出。
输入描述:输入包含多个测试用例,每个测试用例为一行,包含一个正整数n(1≤n≤50),用输入0表示结束。
输出描述:每个测试用例输出n行,每行包含n个整数,整数之间用一个空格分隔。
输入样例:

4
0

样例输出:

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

把矩阵看做一个二维坐标轴,设x和y共同组成矩阵要赋值的位置,x_add和y_add分别表示每次赋值时x的增量和y的增量,用num表示每次横向移动或纵向移动时最后一个位置的值,num_add表示每次移动方向发生变化时num的增量。
用上述几个变量共同确定每次赋值时对应的矩阵位置,然后以(0,0)为起始位置,以横向为初始移动位置,从而实现从边沿到内部螺旋移动的方式为矩阵赋值。最终形成的矩阵就是目的螺旋矩阵。实现方式如下:

#include
using namespace std;void func(int n)
{int a[n][n];int x = 0,y = -1;              //x,y表示当前数组要赋值的位置 int x_add = 0, y_add = 1;      //每次赋值时,x和y的增量 int num = n,num_add = n;       //num:移动方向发生变化的转变点,num_add:每次转变时num的增量 for(int i=1;i<=n*n;i++){x += x_add;y += y_add;a[x][y] = i;if(i == num)        //移动方向发生转变 {if(y_add == 1 || y_add == -1)         //横向变纵向 {x_add = y_add;y_add = 0;num_add--;num += num_add;}else                                  //纵向变横向 {y_add = -x_add;x_add = 0;num += num_add;}}}for(int i=0;i>n;while(n!=0){func(n);cin>>n;} 
}

代码效果如下:
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部