题目源自c语言程序设计(非计算机专业)谭志强版。
练习题所属章节--数组。
题目并未介绍魔方阵排列规律(如:将1放在第一行中间一列等).
也未声明n是否奇数偶数。
求可靠解答
求 c语言 输出 1到n^2的自然数构成的魔方阵。
答案:2 悬赏:0
解决时间 2021-03-02 15:19
- 提问者网友:雨之落き
- 2021-03-01 16:25
最佳答案
- 二级知识专家网友:晨与橙与城
- 2021-03-01 17:45
魔方阵是用来锻炼学生的对二维数组元素的精确控制能力的。算法如下
魔方阵的排列规律如下:
⑴将1放在第一行中间一列;
⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如三阶魔方阵,5在4的上一行后一列);
⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
⑷当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
⑸如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
魔方阵的排列规律如下:
⑴将1放在第一行中间一列;
⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如三阶魔方阵,5在4的上一行后一列);
⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
⑷当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
⑸如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
全部回答
- 1楼网友:留下所有热言
- 2021-03-01 18:04
//windowsxp vc++6.0
#include<stdio.h>
int main()
{
int buf[256][256]={0};
int i=0,j=0,n,count;
scanf("%d",&n);
count=buf[0][0]=1;
while(count<n*n)
{
while(j+1<n&&!buf[i][j+1])
buf[i][++j]=++count;
while(i+1<n&&!buf[i+1][j])
buf[++i][j]=++count;
while(j-1>=0&&!buf[i][j-1])
buf[i][--j]=++count;
while(i-1>=0&&!buf[i-1][j])
buf[--i][j]=++count;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%4d",buf[i][j]);
}
printf("\n");
}
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯