#include<stdio.h>
int main()
{int x=0,y=0,n,i,a[22][22]={0},c
scanf("%d",&n)
c=a[x][y]=1
while(c<n*n)
{while(y<n-1&&!a[x][y+1])a[x][++y]=++c //向右
while(x<n-1&&!a[x+1][y])a[++x][y]=++c //向下
while(y>0&&!a[x][y-1])a[x][--y]=++c //向左
while(x>0&&!a[x-1][y])a[--x][y]=++c //向上
}
for(x=0x<nx++)
{for(y=0y<ny++)
printf("%4d",a[x][y])
printf("\n")
}
return 0
}
修改代码和注释如下:
#include<stdio.h>int main(void)
{
int mm, i = 0, j = 0, aa[15][15], num1 = 1, num3, num2
printf("Enter n(n<=15):")
scanf("%d", &mm)
for (num2 = mm - 1 num2 > 0 num2--)
{
if(((mm-1)/2==i)&&(mm%2!=0)) //处理总列数为奇数的中点值
aa[i][j] = num1
//for (num3 = 0 num3 < num2 num3++) 起始点逻辑有误,用下一行替换
for (num3 = mm-num2-1 num3 < num2 num3++)
{
aa[i][j] = num1
num1 = num1 + 1
j = j + 1
}
//for (num3 = 0 num3 < num2 num3++) 起始点逻辑有误,用下一行替换
for (num3 = mm-num2-1 num3 < num2 num3++)
{
aa[i][j] = num1
num1 = num1 + 1
i = i + 1
}
//for (num3 = 0 num3 < num2 num3++) 起始点逻辑有误,用下一行替换
for (num3 = mm-num2-1 num3 < num2 num3++)
{
aa[i][j] = num1
num1 = num1 + 1
j = j - 1
}
//for (num3 = 0 num3 < num2 num3++) 起始点逻辑有误,用下一行替换
for (num3 = mm-num2-1 num3 < num2 num3++)
{
aa[i][j] = num1
num1 = num1 + 1
i = i - 1
}
i++
j++
}
for (i = 0 i < mm i++)
{
for (j = 0 j < mm j++)
{
printf("%5d", aa[i][j])
}
printf("\n")
}
return 0
}
在VC6调试通过,如下图:
供参考。
1、下面是一个5*5阶的螺旋方阵。编程打印出此形式的n*n(n<=15)阶的方阵(顺时针方向旋进),n由键盘输入。
┌ 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 ┘
2、例程:
#include <stdio.h>int get(int x, int y, int lt, int n)
{
if(x == 0)
return lt+y
else if(y == 0)
return lt+4*(n-1)-x
else if(y == n-1)
return lt+n+x-1
else if(x == n-1)
return lt+3*(n-1)-y
else
return get(x-1, y-1, lt+4*(n-1), n-2)
}
int main(void)
{
int n, i, j
scanf("%d", &n)
for(i = 0 i < n ++i) {
for(j = 0 j < n ++j)
printf("%2d ", get(i, j, 1, n))
putchar('\n')
}
return 0
}