c语言编程题求解,感谢!(再讲一下解题思路)

感谢感谢!
2025年01月03日 16:36
有1个网友回答
网友(1):

一圈一圈递归。先把最外层一圈的各个坐标与对应数字的关系确定:x=0;y=0;x=n-1;y=n-1时对应的坐标关系。

x,y为坐标,lt为每圈左上角的数字(起始),n为阶数。然后递归计算就是了。

#include 
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;
}