C语言四阶完美幻方
// 四阶幻方.cpp : Defines the entry point for the console application.
/*****************************************************
* 操作系统:Windows XP *
* 编译环境:Microsoft Visual C++6.0 *
* *
* 程序编写:万传华 *
* 联系邮箱:wanchuanhua@ *
*****************************************************/
//求解幻方
// x11 x12 x13 x14
// x21 x22 x23 x24
// x31 x32 x33 x34
// x41 x42 x43 x44
//由于已知四阶幻方数量很多,总数是880*8=7040,
//故在此只求完美幻方
// x11+x12+x13+x14=34
// x21+x22+x23+x24=34
// x31+x32+x33+x34=34
// x41+x42+x43+x44=34
// x11+x21+x31+x41=34
// x12+x22+x32+x42=34
// x13+x23+x33+x43=34
// x14+x24+x34+x44=34
// x11+x22+x33+x44=34
// x14+x23+x32+x41=34
//还有泛对角线
// x21+x32+x43+x14=34
// x31+x42+x13+x24=34
// x41+x12+x23+x34=34
// x11+x24+x33+x42=34
// x12+x21+x34+x43=34
// x13+x22+x31+x44=34
//#include "stdafx.h"
#include
#include
#include
#include
#include
void show(int *M,unsigned rows,unsigned cols)
{printf("\n");
for(unsigned i=0;i
{for(unsigned j=0;j
printf("%d, ",*M++);
printf("\n");
}
printf("\n");
};
int gcd(int a,int b)
{int c;
//处理b>a的情况
if(b>a)
{c=a,a=b,b=c;
}
do
{c=a%b,a=b,b=c;
}while(c);
return a;
};
//整数型方程
//方程数FCS>1,未知数WZS>1,FCS<=WZS
//int *M ,每行一个表达式(共FCS行),共WZS+1列(加常数列)
void Equation(int *M,unsigned FCS,unsigned WZS)
{unsigned row,col,i,j,t;
int *P,*Q;//用于访问数组,指向当前操作的方程式
int x,y,z,k;
++WZS;
row=0,col=0,P=M;//参考数row,col
do
{//寻找非零参考数
t=row;Q=P;
while(Q[col]==0)
{++t;Q+=WZS;
if(t>=FCS) break;
}
if(t>=FCS)
{++col;
continue;
}
if(P!=Q)//交换
{for(j=0;j
{k=P[j];
P[j]=Q[j];
Q[j]=k;
}
}
z=P[col];//参考数位置:row行,col列
//消元
for(i=row+1,Q=P+WZS;i
{y=Q[col];
if(y==0) continue;
k=gcd(abs(z),abs(y));
x=z/k,y/=k;
for(j=0;j