螺旋方阵

    xiaoxiao2021-03-25  126

    点击获取原题链接

    螺旋方阵 Time Limit: 1000MS Memory Limit: 65536KB Problem Description n×n的螺旋方阵当n=5和n=3时分别是如下的形式 ![这里写图片描述](http://acm.sdut.edu.cn/image/1295.png) 请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。 Input 输入第一行为整数m(0<m<10),代表有m组输入; 接下来是m行数据,每行输入一个n(0<n<11)。 Output 按照输入的次序,依次输出每一个n×n方阵(一个方阵的同一行数据之间以'\t'分隔) 两个输出方阵之间输出一个空行。 Example Input 1 4 Example Output 1   2   3   4 12  13  14  5 11  16  15  6 10 9  8   7 Hint Author /********题目思路就是吧二维数组分层********/ /********每一层按照上 右 下 左的 方向的打印数据****/ /********最后在递归里面的一层 一直到边界***/ #include <bits/stdc++.h> using namespace std; int a[20][20]; ///二维数组来存放 数据 void fill(int number,int begin,int size)/// 填充数组函数( 该层的第一个要打印的数据 ,该层的首元素的行标 列标 ,层数) { if(size==0)///该层的尺寸为0直接返回 return ; else if(size==1)/// 该层的尺寸为1 则该层的数据只有一个 { a[begin][begin]=number; return; } int i=begin;///行标 int j=begin;///列标 for(int k=1; k<=size; k++,number++,j++) ///打印上边 { a[i][j]=number; } i++;///下降一个格 j--;///上边多加了一次 for(int k=1; k<=size-1; k++,number++,i++) ///打印右边 { a[i][j]=number; } j--; i--; for(int k=1; k<=size-1; k++,number++,j-- ) ///打印下面 { a[i][j]=number; if(k==size-1)//同上到达边界 退出循环 { number++; break; } } i--; for(int k=1; k<=size-2; k++,number++,i--) ///打印左边 { a[i][j]=number; } fill(number,begin+1,size-2);///递归内层 } int main() { int T; cin>>T; while(T--)///N组数据 { int n; cin>>n; fill( 1,1,n);/// 该层的第一个要打印的数据 ,该层的首元素的行标 列标 ,层数 for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { cout<<a[i][j]; if(j==n) { cout<<endl; } else cout<<'\t'; } } } }
    转载请注明原文地址: https://ju.6miu.com/read-8241.html

    最新回复(0)