欢迎光临散文网 会员登陆 & 注册

魔方矩阵的matlab实现

2023-03-12 12:08 作者:谣言控制中心  | 我要投稿

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)


魔方矩阵的matlab实现的评论 (共 条)

分享到微博请遵守国家法律