当前位置:首页 > 代码 > 正文

魔方阵代码(魔方世界代码大全)

admin 发布:2022-12-19 22:15 333


今天给各位分享魔方阵代码的知识,其中也会对魔方世界代码大全进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

求大神!!用matlab编写 魔方阵的函数 ,或者matlab中magic函数的源代码

magic()魔方阵的函数 。代码见附件。

在命令窗口下,输入

M = magic(5)    %5阶魔方阵

M =

  17    24     1     8    15

  23     5     7    14    16

   4     6    13    20    22

  10    12    19    21     3

  11    18    25     2     9

如何求解偶数阶魔方阵 用C语言 编写的代码

本人亲自写的程序,望采纳,如下:

#includestdio.h

int a[200][200]={0};           /*200为我自己定义的,可根据需要修改*/

void JSZ(int n)                                /*奇数魔方阵算法*/

{int p,k,i,j;

 p=0;k=n/2;

 a[p][k]=1;

 for(i=2;i=n*n;i++)

  {if((i-1)%n==0)

    {if(p==n-1)p=0;

     else p++;

    }

   else

    {if(p==0)p=n-1;

     else p--;

     if(k==n-1)k=0;

     else k++;

    }

   a[p][k]=i;

  }

}

void Ou4bZ(int n)                  /*偶数4的倍数魔方阵算法*/

{int a1[200][200],a2[200][200],i,j;

 for(i=0;in;i++)

  for(j=0;jn;j++)

   {if(i%4==0||(i+1)%4==0)a1[i][j]=j+1;

    else a1[i][j]=n-j;

   }

 for(j=0;jn;j++)

  for(i=0;in;i++)

   {if(j%4==0||(j+1)%4==0)a2[i][j]=n*i;

    else a2[i][j]=(n-1-i)*n;

   }

 for(i=0;in;i++)

  for(j=0;jn;j++)

   a[i][j]=a1[i][j]+a2[i][j];

}

void N_4OuZ(int n)                   /*偶数非4的倍数魔方阵算法*/

{int s[200],x[200],z[200],y[200],i,p,k,b[200][200]={0};

 z[0]=4;z[1]=10;s[0]=2;s[1]=9;

 for(i=2;in/2-1;i++)

  {if(i%2==0)

    {z[i]=z[i-1]+1;

     s[i]=s[i-1]+3;

    }

   else

    {z[i]=z[i-1]+7;

     s[i]=s[i-1]+5;

    }

  }

 y[0]=3;y[1]=5;x[0]=1;x[1]=6;

 for(i=2;in/2;i++)

  {if(i%2==0)

    {y[i]=y[i-1]+3;

     x[i]=x[i-1]+1;

    }

   else

    {y[i]=y[i-1]+5;

     x[i]=x[i-1]+7;

    }

  }

 Ou4bZ(n-2);

 for(p=1;pn-1;p++)

  for(k=1;kn-1;k++)

   b[p][k]=a[p-1][k-1]+(n*n-(n-2)*(n-2))/2;

 for(p=1;pn-1;p++)

  for(k=1;kn-1;k++)

   a[p][k]=b[p][k];

 for(i=0;in/2-1;i++)

  {a[0][i]=s[i];

   a[n-2-i][0]=z[i];

  }

 for(i=0;in/2;i++)

  {a[n-1][n-2-i]=x[i];

   a[i][n-1]=y[i];

  }

 for(i=0;in;i++)

  {if(i==0)a[n-1][0]=n*n+1-a[0][n-1];

   else if(in/2-1)a[n-1][i]=n*n+1-a[0][i];

   else if(i==n-1)a[n-1][n-1]=n*n+1-a[0][0];

   else a[0][i]=n*n+1-a[n-1][i];

   if(i0in/2)a[i][0]=n*n+1-a[i][n-1];

   if(i=n/2in-1)a[i][n-1]=n*n+1-a[i][0];

  }

}

void main()/*主函数*/

{int i,j,n;

 lp:printf("JieShu(1~200): ");

 scanf("%d",n);

 if(n1||n==2||n200)                /*由于没有二阶魔方阵,"n200"为超出定义范围*/

  {printf("SCANF ERROR!\n");

   goto lp;

  }

 if(n%2==0)

  {if(n%4==0)Ou4bZ(n);

   else N_4OuZ(n);

  }

 else JSZ(n);

 for(i=0;in;i++)

  {for(j=0;jn;j++)

    printf("%5d",a[i][j]);

   printf("\n");

  }

 goto lp;

}

C语言编程,输出魔方阵

程序代码:

#includelt;stdio.hgt;

#define N 16

int main()

{

int a[N][N]={0},i,j,k,p,n;

p=1;

while(p==1)

{

printf("Enter n(1~%d):",N);

scanf("%d",n);

if((n!=0)(nlt;N)(n%2!=0))

p=0;

}

i=n+1;

j=n/2+1;

a[1][j]=1;

for(k=2;klt;=n*n;k++)

{

i=i-1;

j=j+1;

if((ilt;1)(jgt;n))

{

i=i+2;

j=j-1;

}

else

{

if(ilt;1)i=n;

if(jgt;n)j=1;

}

if(alt;igt;[j]==0)alt;igt;[j]=k;

else

{

i=i+2;

j=j-1;

alt;igt;[j]=k;

}

}

for(i=1;ilt;=n;i++)

{

for(j=1;jlt;=n;j++)

printf("%4d",alt;igt;[j]);

printf("\n");

}

return 0;

}

扩展资料:

1.第一行中间一列的值为1。

所以用j=n/2+1确定1的列数,得出a[1][j]=1。

2.每一个数存放的行比前一个数的行数减1,列数加1。

行数用i=i-1确定,列数用j=j+1确定。

3.如果一个数行数为第一行,则下一个数行数为最后一行。

4.如果一个列行数为最后一列,则下一个数列数为第一列。

5.如果按上面的规则确定的位置上已有数,或上一个数是第一行最后一列,则把下一个数放在上一个数的下面。

pascal 奇数阶魔方阵 注意审题 要完整的代码 谢谢

要求好苛刻啊,你看看这个行不行

const

maxsize = 11;

type

sqrtype = array[1..maxsize, 1..maxsize] of longint;

var

square : sqrtype;

size, row, sum : longint;

procedure makesquare(var sq : sqrtype;limit : longint);

var

num,r,c : longint;

begin

for r:=1 to limit do

for c:=1 to limit do

sq[r, c] := 0;

if (limit and 1)0 then

begin

r:=(limit+1) div 2;

c:=limit;

for num:=1 to limit*limit do

begin

if sq[r,c]0 then

begin

dec(r);

if r1 then

inc(r,limit);

dec(c,2);

if c1 then

inc(c,limit);

end;

sq[r,c]:=num;

inc(r);

if rlimit then

dec(r,limit);

inc(c);

if climit then

dec(c,limit);

end;

end;

end;

procedure writesquare(var sq : sqrtype;limit : longint);

var

row,col : longint;

begin

for row:=1 to Limit do

begin

for col:=1 to (limit div 2) do

write(sq[row,2*col-1]:4,' ',sq[row,2*col]:4,' ');

writeln(sq[row,limit]:4);

end;

end;

begin

size:=3;

while (size=maxsize) do

begin

writeln('Magic Square with size ',size);

writeln;

makesquare(square,size);

writesquare(square,size);

writeln;

sum:=0;

for row:=1 to size do

inc(sum,square[row,1]);

writeln('Sum of the rows,columns and diagonals = ', sum);

writeln;

writeln;

inc(size,2);

end;

end.

关于魔方阵代码和魔方世界代码大全的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/27103.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载