这个问题怎么解决?

zqpsswh 2004-05-02 08:39:32
要求输入N 自动打出1到N^2的数的魔方

就是每行 每列 每对角线的和相等

只能用循环和条件语句实现

我想了很久......
...全文
74 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hslinux 2004-05-03
  • 打赏
  • 举报
回复
找找以前的帖子,,奇偶魔方都有
jmlt1983 2004-05-02
  • 打赏
  • 举报
回复
有4条规则:
1。在奇数阵中间的位置填1
2。在1的左上方或右上方填入2(注意填入方向要一致)
3。若有数字1存在,无法填入数字4时,数字4填入应在3的下方
- 1 -
- - 3
2 - 4 -为空,填入顺序为1,2,3...........

4。当数字填到左上方时,下一个数字自动填入到该数字的下方
举例:

6 1 -
7 5 3
2 - 4


这样根据规则就可以编了


allsword 2004-05-02
  • 打赏
  • 举报
回复
比较困难
我这儿有奇数的思路:
对于方阵问题总结如下:
"1"总是在第一个行的中间;对于其他自然数,目前数的右上方是下一个数的位置,
如果目前数的右上方已被其他数占据,则下一数在目前数的正下方;如果目前数
在第一行,但不在最右侧,则下一数在最后一行,列数右移一列;如果目前数在
第一行的最右侧,则下一数在目前数的下侧;如果目前数在其他行的最右侧,则
下一数在上一行的最左侧。
#include <iostream.h>
const int N=15;
void main()
{
int i,j,k,m,n;
int G[N][N];
cout<<"Input the odd number you want!"<<endl;
cin>>m;
if ((m>0)&&(m%2))
{
cout<<"your inputed number is "<<m<<endl;
n=m*m;
j=0;
k=m/2;
for (i=1;i<=n;i++)
{
G[j][k]=i;
if(i%m==0)
if(j==m-1)
j=0;
else j++;
else
{
if(j==0)
j=m-1;
else j--;
if (k==m-1)
k=0;
else k++;
}
}
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
cout.width(5);
cout<<G[i][j];
}
cout<<endl;
}
}
else cout<<"the number you inputed is error!"<<endl;
}

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧