C语言做的魔方阵

Python016

C语言做的魔方阵,第1张

下面是一个打印奇数阶魔方阵的程序:

#include<stdio.h>

int main()

{int n=0,i,j,k=1,p,q,a[20][20]={0}

while(!(n%2))

{printf("请输入一个小于20的奇数:")

scanf("%d",&n)

}

i=0

j=n/2

for(p=0p<np++)

{for(q=0q<nq++)

{if(q>0)

{i=(i+n-1)%n

j=(j+1)%n

}

a[i][j]=k++

}

i=(i+1)%n

}

for(i=0i<ni++)

{for(j=0j<nj++)

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

printf("\n")

}

return 0

}

程序代码:

#include&ltstdio.h&gt

#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)&&(n&ltN)&&(n%2!=0))

p=0

}

i=n+1

j=n/2+1

a[1][j]=1

for(k=2k&lt=n*nk++)

{

i=i-1

j=j+1

if((i&lt1)&&(j&gtn))

{

i=i+2

j=j-1

}

else

{

if(i&lt1)i=n

if(j&gtn)j=1

}

if(a&lti&gt[j]==0)a&lti&gt[j]=k

else

{

i=i+2

j=j-1

a&lti&gt[j]=k

}

}

for(i=1i&lt=ni++)

{

for(j=1j&lt=nj++)

printf("%4d",a&lti&gt[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.如果按上面的规则确定的位置上已有数,或上一个数是第一行最后一列,则把下一个数放在上一个数的下面。

这个是17以内奇数阶和四阶的!!!

#include<stdio.h>

void main()

{

int x,i,j,fl,k=0,a[18][18]={0}

printf("请输入层数:")

scanf("%d",&x)

if((x!=4)&&(x%2==0)||(x<0)&&(x>18))

fl=0

else if(x==4)

{

for(i=0i<xi++)

{

for(j=0j<xj++)

{

k+=1

a[i][j]=k

}

}

for(i=0i<xi++)

for(j=0j<xj++)

{

if(((i==j)&&(i<2))||((j==x-i-1)&&(j>2)))

{

k=a[i][j]a[i][j]=a[x-i-1][x-j-1]a[x-i-1][x-j-1]=k

}

}

}

else

{

i=0

j=x/2

a[0][j]=1

for(k=2k<=x*xk++)

{

i=i-1

j=j+1

if(i<0&&j>x-1)

{

i=i+1

j=j-1

}

else

{

if(i<0)i=x-1

if(j>x-1)j=0

}

if(a[i][j]==0)

a[i][j]=k

else

{

i=i+2

j=j-1

a[i][j]=k

}

}

}

if(fl==0)

printf("无此魔方阵!\n")

else

{

for(i=0i<xi++)

{

for(j=0j<xj++)

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

printf("\n")

}

}

}