幻方 问题 n 幻方编程问题

1.问题描述:

问题 n(n为奇数)阶幻方就是把整数1~n2排成n×n的方阵,使得每行元素之和与每列元素之和以及两条对角线上的元素之和都相等。要求用C编程语言实现算法,完成程序的设计,在VC++6.0 开发环境运行算法
我要 程序 我想参考下程序 能运行的 最好有解析

n(n为奇数)阶幻方实现方法:

⑴ 将1放在第一行中间一列;   
⑵ 从2开始直到n×n止各数依次按下列规则存放按45°方向行走,如向右上每一个数存放的行比前一个数的行数减1,列数加1   
⑶ 如果行列范围超出矩阵范围,则回绕,例如1在第1行,则2应放在最下一行,列数同样加1;  ⑷ 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时则把下一个数放在上一个数的下面。

代码如下:
#include"stdio.h"   
#include"math.h"   
int a[10][10]; //定义一个二维数组存放数据,大小根据测试的阶数确定
void ins(int n)
{
int x,y,m;
x=0;
y=n/2;
for(m=1;m<=n*n;m++) //依次将1~n*n赋值给二维数组
{
a[x][y]=m;// 将1放在第一行中间一列
if(m%n!=0)
{
x--; // 从2开始直到n×n止各数依次按下列规则存放:按45度方向行走
y++;
if(x<0) // 如果行列范围超出矩阵范围,则回绕
x=x+n;
if(y==n)
y=n-y;
}
else
{
x++;
if(x==n)
x=x-n;
}
}
}
main()
{
int i,j,n;
scanf("%d",&n);//输入阶数
ins(n); //调用函数
for(i=0;i<n;i++) //打印出幻方
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]); //格式化输出
puts(""); //打印2个空行
puts("");
}
getch(); //win_TC下的语句用于停住画面,其他开发环境下无需
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-30
o
第2个回答  2012-05-29
87864追问

能帮我设计这个程序吗?

相似回答