| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 886 人关注过本帖
标题:帮我改改这个程序(打印魔方阵)
取消只看楼主 加入收藏
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
帮我改改这个程序(打印魔方阵)
main()
{
int i,j,n,k,a[100][100];
printf("Please input n(odd,3~99):\n");
scanf("%d",&n);
for(i=1,j=(n+1)/2,k=1;k<=n*n;i--,j++,k++)
{
if(i==0 && j==n+1)
{i=2;j=n;}
if(i==0) i=n;
if(j==n+1) j=1;
if(a[i][j]!=0)
{i=i+2;j=j-1;}
a[i][j]=k;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
}
搜索更多相关主题的帖子: feng00055 
2009-08-26 21:06
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 
魔方阵简介
魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。  如3×3的魔方阵:   8 1 6   3 5 7   4 9 2   魔方阵的排列规律如下:  (1)将1放在第一行中间一列;  (2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);  (3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;  (4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;  (5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
2009-08-27 08:02
feng00055
Rank: 2
等 级:论坛游民
帖 子:56
专家分:27
注 册:2009-8-26
收藏
得分:0 

大侠不愧为大侠!
我学到了两点:
1 数组初始化后未赋值的项才为0
2 最后加上两个getchar()后自动出值,没在教材上看到过,学习了!
非常感谢教会了我这些,让我今后少走弯路!
我的那个原程序只要补上以上两点就可以完美得运行了,如下:
#include <stdio.h>
main()
{
int i,j,n,k,a[100][100]={0};
printf("Please input n(odd,3~99):\n");
scanf("%d",&n);
for(i=1,j=(n+1)/2,k=1;k<=n*n;i--,j++,k++)
{
if(i==0 && j==n+1)
{i=2;j=n;}
if(i==0) i=n;
if(j==n+1) j=1;
if(a[i][j]!=0)
{i=i+2;j=j-1;}
a[i][j]=k;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
getchar();
getchar();
}
2009-08-27 19:18
快速回复:帮我改改这个程序(打印魔方阵)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018100 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved