请写出一个 C 语言程序,该程序对输入的任意正整数n,产生并且显示相应的 n 阶螺旋式数字方阵。
例如,当 n =5时,要显示的螺旋式数字方阵为
#include <stdio.h>
int main()
{
int n, i, j;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
printf("%3d", get(i, j, n));
printf("\n");
}
}
// 每次输出一个口
int get(int i, int j, int n)
{
// 第一行 1 2 3 4 5
if (i == 1) return j;
// 最后一行 3*5-1-1=13 3*5-2-1=12
if (i == n) return 3 * n - j - 1;
// 第一列(第二~倒数第二行) 4*5-2-2=16
if (j == 1) return 4 * n - i - 2;
// 最后一列(第二~倒数第二行) 5+2-1=6
if (j == n) return n + i - 1;
// 中间行和列 4*5-4+1=20-3=17
return 4 * n - 4 + get(i - 1, j - 1, n - 2);
}