/要求输出魔方阵。所谓魔方阵是指每一行、每一列的和对角之和均相等的方阵。
例如,五阶魔方阵为
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
程序功能要求:从键盘输入魔方阶层,只为奇数。例如输入5,则输出上图。/
#include<stdio.h>
void main()
{
int a[50][50],x,y,m,p;
printf("请输入奇数\n");
do{
scanf("%d",&m);
} while(m<=0||m>=50);
for(x=0;x<m;x++)
for(y=0;y<m;y++)
a[x][y]=0;
x=0;
y=m/2;
a[x][y]=1;
for(p=2;p<=m*m;p++)
{
if(x-1<0)
x=x-1+m;
else x--;
if(y+1>=m)
y=y+1-m;
else y++;
if(a[x][y]!=0)
{
x=(x+2)%m;
y=(y-1)%m;
} a[x][y]=p;
}
for(x=0;x<m;x++)
{
for(y=0;y<m;y++)
printf("%4d",a[x][y]);
printf("\n");
}
}
这个程序我哪里有错误
c语言数组魔方阵问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 快乐鹦鹉 2021-07-23 17:16关注
#include<stdio.h> #include<stdlib.h> void main() { int a[50][50],x,y,m,p; printf("请输入奇数\n"); do{ scanf("%d",&m); } while(m<=0||m>=50); for(x=0;x<m;x++) for(y=0;y<m;y++) a[x][y]=0; x=0; y=m/2; a[x][y]=1; for(p=2;p<=m*m;p++) { if(x-1<0 && y+1>=m) //当两者同时满足时,要特殊处理,即左上角的下一个值是放在左上角的下方,这是特例 { x=1; } else { if(x-1<0) x=x-1+m; else x--; if(y+1>=m) y=y+1-m; else y++; } if(a[x][y]!=0) { x=(x+2)%m; y=(y-1)%m; } a[x][y]=p; } for(x=0;x<m;x++) { for(y=0;y<m;y++) printf("%4d",a[x][y]); printf("\n"); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制