任意阶魔方阵matlab程序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

function magiccube

sign=1;sign2=1;sign3=1;sign4=1;

while(1)

n=input('Please input the number you want:or you can input 0 to quit the action:');

if n==0

break;

end

if n<0

n=input('You have input a wrong number,Please input the number again:');

end

m=zeros(n);

if mod(n,4)==0 %算n为4的倍数的魔方阵

for i=1:n/2

sign6=1;

if sign3>0&&sign4==1&&sign6==1

sign3=sign3-1;sign6=0;

if sign3==0

sign4=0;

sign3=2;

end

for j=1:n

sign5=1;

if sign>0&&sign2==1&&sign5==1

sign=sign-1;sign5=0;

if sign==0

sign=2;

sign2=0;

end

m(n-i+1,j)=n*i-j+1;

m(i,n-j+1)=n^2+1-m(n-i+1,j);

end

if sign>0&&sign2==0&&sign5==1

sign=sign-1;sign5=0;

if sign==0

sign=2;

sign2=1;

end

m(i,n-j+1)=n*i-j+1;

m(n-i+1,j)=n^2+1-m(i,n-j+1);

end

end

end

if sign3>0&&sign4==0&&sign6==1

sign3=sign3-1;sign6=0;

if sign3==0

sign4=1;

sign3=2;

end

for j=1:n

sign5=1;

if sign>0&&sign2==1&&sign5==1

sign=sign-1;sign5=0;

if sign==0

sign=2;

sign2=0;

end

m(i,j)=n*(i-1)+j;

m(n-i+1,n-j+1)=n^2+1-m(i,j);

end

if sign>0&&sign2==0&&sign5==1

sign=sign-1;sign5=0;

if sign==0

sign=2;

sign2=1;

end

m(n-i+1,n-j+1)=n*(i-1)+j;

m(i,j)=n^2+1-m(n-i+1,n-j+1);

end

end

end

end

m

end

if mod(n,2)==1 %算n为奇数的魔方阵

m=zeros(n+1,n+1);

m(1,:)=-1;

m(:,n+1)=-1;

b=2;c=fix((n+1)/2);

m(b,c)=1;

for i=2:n^2

sign7=1;

if m(b-1,c+1)==0&&sign7==1

m(b-1,c+1)=m(b,c)+1;

b=b-1;c=c+1;sign7=0;

end

if m(b-1,c+1)~=-1&&m(b-1,c+1)~=0&&sign7==1 m(b+1,c)=m(b,c)+1;

b=b+1 ;

c=c;

sign7=0;

end

if m(b-1,c+1)==-1&&m(b-1,c)==-1&&m(b,c+1)==-1&&sign7==1

m(b+1,c)=m(b,c)+1;

b=b+1;c=c;sign7=0;

end

if m(b-1,c+1)==-1&&m(b-1,c)==-1&&sign7==1

a44=m(b-1,c+1);

a444=m(b-1,c);

m(n+1,c+1)=m(b,c)+1;

b=n+1;c=c+1;sign7=0;

end

if m(b-1,c+1)==-1&&m(b,c+1)==-1&&sign7==1 m(b-1,1)=m(b,c)+1;

b=b-1;c=1;sign7=0;

end

end

m(2:n+1,1:n)

end

if mod(n,2)==0&&mod(n,4)~=0 %算n为非4的倍数的偶数阶魔方阵

u=n/2;

v=(n/2-1)/2;

a=magic(n/2); %因前面算法已经算出奇数阶魔方阵,此处直接调用系统函数

b=magic(n/2)+u*u;

c=magic(n/2)+2*u*u;

d=magic(n/2)+3*u*u;

if v>=1

for i=1:v

mid=a(:,i);

a(:,i)=d(:,i);

d(:,i)=mid;

if i>=2

mid=b(:,u-i+2);

b(:,u-i+2)=c(:,u-i+2);

c(:,u-i+2)=mid;

end

end

mid2=a((u+1)/2,1);

a((u+1)/2,1)=d((u+1)/2,1);

d((u+1)/2,1)=mid2;

mid3=a((u+1)/2,(u+1)/2);

a((u+1)/2,(u+1)/2)=d((u+1)/2,(u+1)/2);

d((u+1)/2,(u+1)/2)=mid3;

end

m=[a,c;d,b]

end

end

相关文档
最新文档