这个问题怎么解决?

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

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

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

我想了很久......
...全文
51 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过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;
}
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-05-02 08:39
社区公告
暂无公告