// n阶螺旋方阵.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "iostream"
using namespace std;
//打函数印螺旋方阵的
void print(int n)
{
int i, j, k;
//定义i为行,j为列,k是一个额外空间
i = j = 0;
//从a[0][0开始
int a[30][30];
//开辟一个30*30的空间
int count = 1;
//count是计数,从一加到n*n
int q = n;
//海龟算法,以(1,0)为向右,一直右转
//(1,0)->(0,-1)->(-1,0)->(0,1)
//代换方式如下利用k,k = d;d = e; e = -k;
int d = 1;
int e = 0;
//定义开始方向向右
//因为一阶为1,二阶为3,三阶为5,四阶为7;所以设置g=2n-1;外循环转这么多次
for (int g=0; g< 2 * q - 1;g++)
{
for (int h=0; h < n;h++)
{
//然后第一次走n的距离,第二次n-1第三次n-1;第四次n-2,第五次n-2
//故采用n每次减0.5的方法,控制走的距离
a[i][j] = count;
if (d == 1 && e == 0)
j++;
else if (d == 0 && e == -1)
i++;
else if (d == -1 && e == 0)
j--;
else
i--;
count++;
}
k = d;
d = e;
e = -k;
//参上,改变方向
n = n - 0.5;
//参上,控制距离
}
//打印函数
for (int x = 0; x < n; x++)
{
for (int y = 0; y < n; y++)
{
printf_s("%d", a[x][y]);
}
printf_s("\n");
}
}
int main()
{
//主函数调用,9阶
print(9);
system("pause");
return 0;
}