本文目录一览:
用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");
}
}