输入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
下面为我的代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int arr[15][15];
int main()
{int n;while(~printf("请输入n的值:")){scanf("%d",&n);memset(arr,0,sizeof(arr));int cnt=1;int i=1,j=1;arr[1][1]=1;while(cnt<n*n) //当改变到最后一个数值时跳出{while(arr[i][j+1]==0&&j+1<=n){cnt++;arr[i][j+1]=cnt;j++;} //将当前行按顺序改变直到边界或遇到一已经改变的位置while(arr[i+1][j]==0&&i+1<=n){cnt++;arr[i+1][j]=cnt;i++;} //将当前按顺序改变直到边界或遇到一已经改变的位置while(arr[i][j-1]==0&&j-1>=1){cnt++;arr[i][j-1]=cnt;j--;} //将当前按顺序改变直到边界或遇到一已经改变的位置while(arr[i-1][j]==0&&i-1>=1){cnt++;arr[i-1][j]=cnt;i--;} //将当前按顺序改变直到边界或遇到一已经改变的位置}printf("%d阶螺旋方阵为:\n",n);for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%3d",arr[i][j]); //使每个数字占三位}printf("\n");}}return 0;
}
一组测试样例为: