求解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;}
}
代码效果如下:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
