魔方阵,是一种每一行、每一列以及对角线的和相等。
魔方阵的一种特性是:
1.第一个元素1的位置始终在第一行正中。
2.下一个元素的位置总是在刚插入位置的右上方。
3.如果右上方的位置超出方阵上边界,则新的位置应取列的最下位置。
4.如果右上方的位置超出方阵右边界,则新的位置应取行的最座位置。
5.若刚插入的元素为n的整数倍,则选刚插入元素位置的下一行同列插入下一元素。
实现代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define M 20 4 int main(int argc,char *argv[]) 5 { 6 int num=1,len,row,col; 7 int a[M][M]; 8 printf("请输入要输出的行数:"); 9 scanf("%d",&len); 10 row=0; 11 col=len/2; 12 a[row][col]=num++; 13 while(num <= len *len) 14 { 15 if(((num-1)%len) == 0) 16 { 17 row=(row+1)%len; 18 } 19 else 20 { 21 row=(row-1+len)%len; 22 col=(col+1)%len; 23 } 24 a[row][col]=num++; 25 } 26 for(row=0;row<len;row++) 27 { 28 for(col=0;col<len;col++) 29 printf("%3d",a[row][col]); 30 printf("\n"); 31 } 32 system("pause"); 33 return 0; 34 }
逻辑上设计是:
1.首先判断上一元素是否为N的倍数。
2.然后再对下一位置进行取余操作,这样无论是否越界都会得到正确的位置。
时间: 2024-10-26 08:55:56