C语言编译,求解感激不尽

 

供参考:

#include <stdio.h>

int a[100][100];

void func(int n)
{
    int x = 0, y = -1, x_inc = 0, y_inc = 1;//x,y表示当前数组要赋值的位置,x_inc每次赋值时,x和y的增量
    int num = n, num_inc = n; //num:移动方向发生变化的转变点,num_inc:每次转变时num的增量
    for (int i = 1; i <= n * n; ++i)
    {
        x += x_inc;
        y += y_inc;
        a[x][y] = i;
        if (i == num) //每次移动方向发生改变的判断条件
        {
            if (y_inc == 1 || y_inc == -1) //横向变纵向
            {
                x_inc = y_inc;
                y_inc = 0;
                num_inc--;  
                num += num_inc; //下一次变向的终点
            }
            else //纵向变横向
            {
                y_inc = -x_inc;
                x_inc = 0;
                num += num_inc; 
            }
        }
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    func(n);
    for (int i = 0; i < n; ++i)
    {
         for (int j = 0; j < n; ++j)
                printf("%3d ", a[i][j]);
         printf("\n");
    }
    
    return 0;
}