1个回答
展开全部
一圈一圈递归。先把最外层一圈的各个坐标与对应数字的关系确定: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坐标、每圈的起始数字、阶数求出坐标对应的数字。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询