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

感谢感谢!... 感谢感谢! 展开
 我来答
linjunlzy
2020-07-02 · TA获得超过1319个赞
知道小有建树答主
回答量:668
采纳率:82%
帮助的人:315万
展开全部

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

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

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

更多追问追答
追问
感谢感谢,int get(int x, int y, int lt, int n)这种定义是什么意思
追答
这是一个函数的意思。。通过x,y坐标、每圈的起始数字、阶数求出坐标对应的数字。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式