『壹』 c语言中魔方阵编程的思路
/*
所谓魔方阵是指这样的的方阵:
它的每一行、每一列和对角线之和均相等。
输入n,要求打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。
例如,当n=3时,魔方阵为:
8 1 6
3 5 7
4 9 2
魔方阵中各数排列规律为:
① 将“1”放在第一行的中间一列;
② 从“2”开始直到n×n为止的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数同样加1;
③ 如果上一数的行数为1,则下一个数的行数为n(最下一行),如在3×3 方阵中,1在第1行,则2应放在第3行第3列。
④ 当上一个数的列数为n时,下一个数的列数应为1,行数减1。如2在第3行第3列,3应在第2行第1列。
⑤如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
如按上面的规定,4应放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6下面。
*/
#include"stdio.h"
void main()
{
int i,n=5;
printf("---------------打印魔方阵-------------\n\n");
int a[5][5];
for( i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=0;//初始化
i=0;
int j=n/2;
int t=1;
int si=0;
int sj=0;//记录上一个数的位置
while(t<=n*n)
{
//printf("\n%4d\n\n",t);
if(a[i][j]==0)
a[i][j]=t;
else
{
if(si==0 && sj==n-1)
{
a[si+1][sj]=t;
i=si+1;
j=sj;
}
if(si!=n-1)
{
a[si+1][sj]=t;
i=si+1;
j=sj;
}
if(si==n-1)
{
a[0][sj]=t;
i=0;
j=sj;
}
}
si=i;
sj=j;
/*计算下一个元素的位置*/
if(i==0)
i=n-1;
else
i=i-1;
if(j==n-1)
j=0;
else
j=j+1;
t=t+1;
}
for(i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n\n");
}
}
『贰』 C语言关于打印n阶魔方阵的编程有几个看不懂的,,求指点啊
在讨论关于C语言打印n阶魔方阵的编程时,可能有几个步骤或概念让人感到困惑。首先,让我们先理解魔方阵是什么。魔方阵是一种正方形的数字排列,其中每一行、每一列以及对角线上的数字之和均相等。在构造n阶魔方阵时,首先要明确的是n阶表示正方形的边长为n。
第一步,确定n的奇偶性。这是构造不同类型的魔方阵的关键。通常情况下,n阶魔方阵可以分为奇数阶、双偶阶(n为偶数且能被4整除)和偶数阶(n为偶数但不能被4整除)三种情况。每种情况的构造方法都有所不同,因此首先要判断n的性质。
第二步,对于奇数阶的魔方阵,可以通过一个通用算法来生成。这个算法通常涉及从数组的中间位置开始,然后按一定的规则移动填充数字,确保每一行、每一列和对角线的和相等。这个过程需要一个循环来控制填充的顺序和位置。
第三步,对于双偶阶的魔方阵,构造方法类似于奇数阶,但需要额外的技巧来确保对角线和其余行、列的和相等。一种常见的方法是先构造出一个基本的魔方阵,然后通过适当的位移操作来调整对角线的元素。
第四步,对于偶数阶的魔方阵,构造则更为复杂,通常需要特殊的算法来确保所有行、列和对角线的和相等。这类构造方法往往涉及到更精细的元素排列和交换操作。
第五步,在编程实现时,需要利用循环来遍历数组并填充数字。例如,当p==1时表示循环条件为真,即一直循环直到p变成0。这通常用于控制循环的次数或判断某个特定条件是否满足。
总结以上步骤,实现C语言打印n阶魔方阵的关键在于正确判断n的性质,选择合适的构造算法,并正确使用循环控制填充过程。理解并掌握这些基本概念和步骤将有助于解决编程过程中可能遇到的疑惑。