首先,我们来聊一聊魔方数组。
1.魔方数组
首先,啥事魔方数组呢?例如:
6 1 8
7 5 3
2 9 4
他的每一行,每一列以及对角线的和都等于一个常数,这个常数为n*(n*n+1)/2。其中,n为阶数。
那么,我们应该怎么实现魔方数组呢?
1.我们将1安置在第一行的中间位置,及(i,j)=(1,(n+1)/2)
2.下一个数我们写到上一个数主对角线的上方,即(i1,j1)=(i-1,j-1)
3.如果在上一步中,i和j出界,则令i=n或者j=n。
4.如果,应写的位置没有出界,但是已经有数字,则将他移到下一行,但是列数不变。
代码如下:环境VS2010
<span style="font-size:24px;"> int a[100][100]; int n;// scanf("%d",&n); int i=1; int j=int((n+1)/2); int i1,j1; int x=1; memset(a,0,sizeof(a)); while(x<=n*n) { a[i][j]=x; x++; i1=i; j1=j; i--; j--; if (i==0) { i=n; } if (j==0) { j=n; } if (a[i][j]!=0) { i=i1+1; j=j1; } } for(i=1;i<=n;i++) { printf("\n"); for (j=1;j<=n;j++) { printf("%4d",a[i][j]); } } </span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-03 21:44:44