魔方矩阵的matlab实现

clc
clear
a=input("请输入矩阵的阶数正整数n:");
b=a*a+1;
A=zeros(a);
d=(a+1)/2;
e=1;f=d;
if(mod(a,4)==0)
for i =0:a-1
for j =0:a-1
if(mod(i,4)==mod(j,4)||mod(i+j,4)==3)
A(i+1,j+1)=b-(i*a+j+1);
else
A(i+1,j+1)=i*a+j+1;
end
end
end
elseif(mod(a,2)==1)
A(1,d)=1;
for i=2:1:a*a
e=e-1;f=f+1;
if(e==0)
e=a;
end
if(f==a+1)
f=1;
end
if(A(e,f)==0)
A(e,f)=i;
else
if(e==a&&f==1)
e=2;
f=a;
A(e,f)=i;
else
e=e+2;
f=f-1;
A(e,f)=i;
end
end
end
elseif(mod(a,4)==2&&a~=2)
m=(a-2)/4;
v=a*a/4;
t=2*m+1;
B=zeros(t);
B(1,m+1)=1;
f=m+1;
for i=2:1:t*t
e=e-1;f=f+1;
if(e==0)
e=t;
end
if(f==t+1)
f=1;
end
if(B(e,f)==0)
B(e,f)=i;
else
if(e==t&&f==1)
e=2;
f=t;
B(e,f)=i;
else
e=e+2;
f=f-1;
B(e,f)=i;
end
end
end
C=v+B;
D=2*v+B;
E=3*v+B;
for i=1:t
if(i==m+1)
p=B(m+1,m+1);
B(m+1,m+1)=E(m+1,m+1);
E(m+1,m+1)=p;
else
n=B(i,1);
B(i,1)=E(i,1);
E(i,1)=n;
end
if(m>1)
t=t+1;
for o=1:m-1
t=t-1;
for i=1:t
x=D(i,t);
D(i,t)=C(i,t);
C(i,t)=x;
end
end
end
A=[B,D;E,C];
end
elseif(a==2)
disp("2*2 型无魔方矩阵")
return
end
A
sum(A)