下面是一个奇阶魔方:
奇阶魔方的意思是说在这个矩阵当中,横行或竖排加起来的和相等。
请编写一个生成奇阶魔方的通用程序在:
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20
下面是算法:
在奇阶魔方当中,第一行中间为1.
如果第i行j列刚填完数字k。如果右上角没有填数字。则在其右上角填k+1;否则在它下面填k+1;
如果第一行第n列填后,在第二行第n列填k+1;
如果第i行第n列填后,在第i—1行第1列填k+1;
如果第1行第j列填后,在第n行j+1处填k+1;
#include<iostream.h>
#define N 7
void main(){
int a[N+1][N+1];
int i=1;
int k=1;
int j=(N+1)/2;
a[i][j]=1;
int i0,j0;
while(k<N*N){
k=k+1;
i0=i-1;
j0=j+1;
if(i0<1&&j0>N)
{i=2;j=N;}
else
if(i0<1&&j0<=N)
{i=N;j=j0;}
else
if(i0>=1&&j0>N)
{i=i0;j=1;}
else
if(a[i0][j0]>0)
i=i+1;
else
{i=i0;j=j0;}
a[i][j]=k;
}
for(i=1;i<=N;i++)
{for(j=1;j<=N;j++)
cout<<" "<<a[i][j];
cout<<endl;
}
}