求个C语言螺旋填数思路

螺旋填数

题目描述:
创建一个m行n列的数组,将1—m*n的数字螺旋填入
方向为右下左上

输入说明:
输入正整数m和n,以空格分隔

输出说明:
输出填好的数组,数组元素之间用空格分隔,数组每行之间以换行分隔

输入示例:
4 5

输出示例:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8

#include<stdio.h>  
int main()
{  
    int m,n,x=0,y=0,c=1;
    scanf("%d %d",&m,&n); 
    int a[m+1][n+1]={0};
    a[x][y]=1;
    while(c!=m*n){   
        while(y+1<n&&!a[x][y+1]) a[x][++y]=++c;
        while(x+1<m&&!a[x+1][y]) a[++x][y]=++c;
        while(y-1>=0&&!a[x][y-1]) a[x][--y]=++c;
        while(x-1>=0&&!a[x-1][y]) a[--x][y]=++c;    
    }
    for(x=0;x<m;x++){
        for(y=0;y<n;y++)
               printf("%3d", a[x][y]);
           printf("\n");
    }
}

test1:
4 5
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
test2:
6 4
1 2 3 4
16 17 18 5
15 24 19 6
14 23 20 7
13 22 21 8
12 11 10 9


#include<stdio.h>
int main(void){
    int m,n,i,j;
    int array[100][100];
    int num=1;//打印数 
    int iStart,iEnd,jStart,jEnd;
    scanf("%d%d",&m,&n);
    iStart=0;
    iEnd=m-1;
    jStart=0;
    jEnd=n-1;
    while(iEnd>=iStart&&jEnd>=jStart){
        //上面的行 
        for(j=jStart;j<=jEnd;j++){
            array[iStart][j]=num;
            num++;
        }
        iStart++;
        //右边的列
        for(i=iStart;i<=iEnd;i++){
            array[i][jEnd]=num;
            num++;
        }
        jEnd--;
        //下面的行 
        if(iEnd>=iStart){
            for(j=jEnd;j>=jStart;j--){
                array[iEnd][j]=num;
                num++;
            }
            iEnd--;
        }
        //左边的列 
        if(jEnd>=jStart){
            for(i=iEnd;i>=iStart;i--){
                array[i][jStart]=num;
                num++;
            }
            jStart++;
        }
    }
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            printf("%d ",array[i][j]);
        }
        printf("\n");
    }
    return 0;
}