三角形螺旋数阵
题目描述
现要生成一个直角边边长为n的三角形螺旋数阵,规则如下:从三角形的左上角(第1行第1列)出发,初始向右移动,无法前进则转向。走完两条直角边后,向左上经过斜边,遇到已经走过的格子则再次转向。在经过的格子中依次填入1, 2, 3, …,如下图所示。
矩阵示意图
输入描述:
一行,一个不大于10的正整数n。
输出描述:
n行n列的三角形螺旋数阵,每一数字占3位,如果数字不足3位,则在前面补充空格。
输入样例:
4
输出样例:
1 2 3 4
9 10 5
8 6
7
(尽量用等宽字体显示)
螺旋矩阵,让它绕圈走就完了
代码如下:
#include <cstdio>#include <iomanip>#include <iostream>using namespace std;int main(){ int n,cnt=0,x=1,y=1,a[15][15]={},b[3][2]={{0,1},{1,0},{-1,-1}},d=0; cin>>n; while (cnt<(n+1)*n/2){ cnt++; a[x][y]=cnt; if(x+b[d][0]>n||x+b[d][0]<1||y+b[d][1]>n||y+b[d][1]<1||a[x+b[d][0]][y+b[d][1]]>0)d=(d+1)%3; x+=b[d][0]; y+=b[d][1]; } for (int i = 1; i <= n; i++){ for (int j = 1; j <= n; j++){ if(a[i][j])cout<<setw(3)<<a[i][j]; else cout<<" "; } cout<<endl; } return 0;}