C语言 螺旋方阵?

Python020

C语言 螺旋方阵?,第1张

#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

}