幻方与编程
#include <stdio.h>
#define N 3
int fun(int (*a)[N])
{ int i,j,m1,m2,row,colum;
m1=m2=0;
%判断对角线的和不否相等 不相等返回0
for(i=0; i<N; i++)
{ j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; }
if(m1!=m2) return 0;
for(i=0; i<N; i++) {
/**********found**********/
row=colum=0;
%判断行row 列colum的和 是否相等 不相等返回0
for(j=0; j<N; j++)
{ row+=a[i][j]; colum+=a[j][i]; }
/**********found**********/
if( (row!=colum) || (row!=m1) ) return 0;
}
/**********found**********/
%判断完毕是幻方返回1
return 1;
}
main()
{ int x[N][N],i,j;
%输入矩阵x
printf("Enter number for array:\n");
for(i=0; i<N; i++)
for(j=0; j<N; j++) scanf("%d",&x[i][j]);
printf("Array:\n");
%输出矩阵
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%3d",x[i][j]);
printf("\n");
}
%根据fun的值输出结果
if(fun(x)) printf("The Array is a magic square.\n");
else printf("The Array isn't a magic square.\n");
}
你要是符合C规则的矩阵输入方法否可以啊??? 你看输出矩阵那块 输出的矩阵跟你输入的是不是一样啊 要是一样 结果都是对的 一般的就是 列之间用空格 行之间用回车 这段程序的重点是为什么把 判断对角线写在前面吧????要是顺序反了 判断是不全面的
B. 幻方的程序编写
利用计算机编程序,可求解出任意阶幻方.(但数字位数受电脑限制,实际上只能是有限范围内的任意阶),如利用Matlab进行计算n阶幻方,其命令为:A=magic(n)。
对于某些平方幻方,高次幻方,利用计算机辅助计算,也可快速求得。
一次幻方,一次幻立方,一次多维幻方,甚至可用简单公式全部求得。
某些类型的平方幻方,甚至高次高维幻方,也可用公式求得。
在幻方公式求解方法,中国处于世界领先水平.中国李文的高维高次幻方公式,是幻方理论中的精品.吴硕辛的高次幻方理论,也可用公式求解。
C. 幻方 问题 n 幻方编程问题
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下的语句用于停住画面,其他开发环境下无需
}
D. 如何用c语言编程使三阶幻方不等(使用数字1至9,直接输出所有结果
4用1至9这9个数编制一个三阶幻方,写出所有可能的结果。所谓幻方是指在正方形的方格表的每个方格内填入不同的数,使得每行、每列和两条对角线上的各数之和...3119
E. 怎样用C语言编写幻方
你的这个问题实际上包括两个问题:
1、幻方的算法
2、怎样用C语言实现幻方的算法
这两个问题是大不同的。
关于幻方的算法,或者叫幻方填法,目前有很多种,拉丁正交、马步法等等,针对奇数或者偶数(又分单偶数和双偶数)等有不同的算法,但这些算法只是帮你找到幻方的一个或多个实例(不会是全部),而同阶数的幻方到底有多少个,那只有用穷举法了,比如4阶幻方,基本4阶幻方共7040个,剔除旋转翻转的,即具有独立结构的共880个;4阶完美幻方共84个,具有独立结构的共48个。
对于高阶幻方(比如超过8阶),穷举法实际上是不可行的,因为它的穷举时间将是天文数字(以目前主流PC),所以不要试图用计算机穷举高阶幻方的全部结果,那将是徒劳的。
如果你只是需要1个实例,那么推荐你使用MATLAB语言工具,因为它提供了幻方函数magic(n),不需要编程,直接从命令窗口输入就可以得到答案。
至于第二个问题,当然你首先会C语言,剩下的就是编程技巧问题了,而这个问题是无从回答的。相信你问的是第一个问题。
以上的回答虽然没有明确给出答案,但相信对你会有帮助。