输出任意阶层的螺旋数组(c语言)

/*
*   根据输入的 m n 显示螺旋数组
*   @author 李政 <[email protected]>
*/

#include<stdio.h>

#define N 20

//行:m  列:n
void matrx(int a[][N],int m,int n)
{
    int d,x=0,y=0;

    int right,left,up,down;
    // d是螺旋数组的值 [1,m*n]
    for( d = 1; d <= m*n; d++)
    {
        a[x][y]=d;
        //判断任意方向是否可以移动
        // 当 y<n-1 且 右边的数 = 0 时 可以向右移动
        right = y < n-1 && a[x][y+1] == 0;
        // 当 y>0  且 左边的数 = 0 时 可以向左移动
        left = y > 0 && a[x][y-1] ==0;
        // 上下方向同理
        down = x < m-1 && a[x+1][y] ==0;
        up = x > 0 && a[x-1][y] ==0;

        if(right)
        {
            //当可以向右时 如果可以向上移动时 要先向上移动
            if(up)
                x--;
            //否则向右移动
            else
                y++;
        }
        else  if(left)
        {
            //当可以向左时 如果可以向下先向下移动
            if(down)
                x++;
            else
            //否则向左移动
                y--;
        }
        else if(down)
        {
            //当可以向下时 如果可以向右先向右移动
            if(right)
                y++;
            //否则向下移动
            else
                x++;
        }
        else if(up)
        {
            //当可以向上时 如果可以向左先向左移动
            if(left)
                y--;
            //否则向上移动
            else
                x--;
        }
    }
}

//打印数组
void output(int a[][N],int m, int n)
{
    int i,j;
    for( i = 0; i < m; i++)
    {
        for( j = 0; j < n; j++)
            printf("%4d",a[i][j]);
          printf("\n");
    }

}

void main()
{
    int a[N][N] = {0};
    int m,n;
    printf("please input num:");
    scanf("%d%d",&m,&n);

    matrx(a,m,n);
    output(a,m,n);
}

猜你喜欢

转载自blog.csdn.net/weixin_42205987/article/details/82024416