您的位置:

数字魔方c语言,c++魔方

本文目录一览:

用C语言如何编程打印出由1到n^2的自然数构成的魔方阵,?

奇数魔方阵就是将数字排列在nxn(n为奇数)的方阵上,要求满足各行、各列与各对角线的和相同。如下图所示,是n=5的奇数魔方阵。

填魔方阵的方法以奇数魔方阵最为简单,第一个数字放在第一行的正中央(填了1),然后向右(左)上填,如果右(左)上已有数字,则向下填,如下图所示:

一般程序语言的阵列多由0开始,为了计算方便,我们利用索引1到n的部份,而在计算是向右(左)上或向下时,我们可以将索引值除以n值,如果得到余数为1就向下,否则就往右(左)上。

4N 魔方阵

与奇数魔术方阵相同,在于求各行、各列与各对角线的和相等,不同的是这次方阵的维度是4的倍数。

先来看看4X4方阵的解法:

简单的说,就是一个从左上由1依序开始填,但遇对角线不填,另一个由左上由16开始填,但只填在对角线,再将两个合起来就是解答了。如果N大于等于2,则以 4X4为单位画对角线,如下所示:

至于对角线的位置该如何判断,有两个公式,有兴趣的可以画图印证,如下:

左上至右下:j % 4 == i % 4

右上至左下:(j % 4 + i % 4) == 1

8阶魔方阵(N=2)的结果如下:

C语言做的魔方阵

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

#includestdio.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=0;pn;p++)

{for(q=0;qn;q++)

{if(q0)

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

j=(j+1)%n;

}

a[i][j]=k++;

}

i=(i+1)%n;

}

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

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

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

printf("\n");

}

return 0;

}

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.如果按上面的规则确定的位置上已有数,或上一个数是第一行最后一列,则把下一个数放在上一个数的下面。

c语言魔方阵

所谓的魔方距阵就是一种特殊的奇数阶方阵:它的行,列,对角线,上的数字之和都要相等,且方阵中的每一个数字都不相等,且数字的范围都在1到n*n之间.

我编的程序如下:

#includestdio.h

#define N 15

main()

{

int i,j,row,cloum,size,square[N][N],count;

clrscr();

printf("please enter the square size(odd =15):\n");

scanf("%d",size);

while(size%2==0||size15||size3)

{

printf("error due to the wrng input!please input it again!\n");

scanf("%d",size);

}

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

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

square[i][j]=0;

i=0;j=(size-1)/2;

square[i][j]=1;

for(count=2;count=size*size;count++)

{

row=i-10?(size-1):(i-1);

cloum=j-10?(size-1):(j-1);

if(square[row][cloum])

i=(++i)%size;

else

{i=row;

j=j-10?(size-1):(j-1);

}

square[i][j]=count;

}

printf("the %d square is:\n",size);

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

{

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

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

printf("\n");

}

}

只能求奇数的魔方阵

#define N 20

main()

{

int a[N][N];

int n,i,j,r;

scanf("%d",n);

for(i=0;iN;i++) for(j=0;jN;j++) a[i][j]=0;

i=0;

j=n/2;

a[i][j]=1;

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

if (a[(i+n-1)%n][(j+1)%n]==0)

{i=(i+n-1)%n;j=(j+1)%n;a[i][j]=r;}

else

{i=(i+1)%n;a[i][j]=r;}

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

{

for(j=0;jn;j++) printf("%4d",a[i][j]);

printf("\n");

}

}

求c语言输出所有三阶魔方阵的方法,

下面是n阶奇数魔方阵的程序,输入的数字是几,就输出几阶魔方阵:

# include stdio.h

void main(){

int array[16][16];

int i, j, k, m, n;

/* 变量初始化 */

m = 1;

while(m == 1)

{

printf("请输入n(0n=15),n是奇数)\n");

scanf("%d", n);

/* 判断n是否是大于0小于等于15的奇数 */

if((n!=0) (n=15) (n%2!=0))

{

printf("矩阵阶数是 %d\n", n);

m = 0;

}

}

/* 数组赋初值为0 */

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

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

array[i][j] = 0;

/* 建立魔方阵 */j = n/2 + 1;

array[1][j] = 1;

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

{

i = i - 1;

j = j + 1;

if((i1) (jn))

{

i = i + 2;

j = j - 1;

}

else

{

if(i 1)

i = n;

if(j n)

j = 1;

}

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

array[i][j] = k;

else

{

i = i + 2;

j = j - 1;

array[i][j] = k;

}

}

/* 输出魔方阵 */for(i=1; i=n; i++)

{

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

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

printf("\n");

}

}