#包含“math.h”
int?a[256][256];
int?總和;
int?check();
作廢?ins(int?n);
作廢?main(){
int?I,j,n,k,t,p,x;
scanf("%d ",& ampn);
sum =(n * n+1)* n/2;
if(n%2==1)?//奇數幻方
ins(n);
if(n%4==2)?{?//單偶幻方
k = n/2;
ins(k);
for(I = 0;?我& ltk;?i++)
for(j = 0;?j & ltk;?j++){
a[I][j+k]= a[I][j]+2 * k * k;
a[I+k][j]= a[I][j]+3 * k * k;
a[I+k][j+k]= a[I][j]+k * k;
}
t =(n-2)/4;
for(I = 0;?我& ltk;?i++)
for(j = 0;?j & ltk;?j++){
如果((j & ltt)& amp;& amp(我& ltt)){
p = a[I][j];
a[I][j]= a[I+k][j];
a[I+k][j]= p;
} if((j & lt;t)& amp;& amp(我& gtk-t-1)){
p = a[I][j];
a[I][j]= a[I+k][j];
a[I+k][j]= p;
}如果((i & gt= t & amp& amp我& lt= k-t-1)& amp;& amp(j & gt= t & amp& ampj & ltt*2)){
p = a[I][j];
a[I][j]= a[I+k][j];
a[I+k][j]= p;
} if(j & gt;1。& ampj & lt=t){
p = a[I][j+k];
a[I][j+k]= a[I+k][j+k];
a[I+k][j+k]= p;
}
}
}
if(n%4==0)?{?//雙偶幻方
x = 1;
for(I = 0;?我& ltn;?i++)
for(j = 0;?j & ltn;?j++)
a[I][j]= x++;
for(I = 0;?我& ltn;?i++)
for(j = 0;?j & ltn;?j++){
if(I % 4 = = 0 & amp;& ampabs(i-j)%4==0)
for(k = 0;?k & lt4;?k++)
a[I+k][j+k]= n * n-a[I+k][j+k]+1;
不然呢?if(I % 4 = = 3 & amp;& amp(i+j)%4==3)
for(k = 0;?k & lt4;?k++)
a[I-k][j+k]= n * n-a[I-k][j+k]+1;
}
}
if(check(n)==1){
for(I = 0;?我& ltn;?i++){
for(j = 0;?j & ltn;?j++)
printf("%5d ",a[I][j]);
printf(" \ n ");
}
}
}
int?check(int?n)?{?//檢查它是否是魔方
int?I,j,sum1=0,sum2
for(I = 0;?我& ltn;?i++){
for(j = 0;?j & ltn;?j++)
sum 1+= a[I][j];
if(sum1!=總和)
回歸?0;
sum 1 = 0;
}
for(I = 0;?我& ltn;?i++){
for(j = 0;?j & ltn;?j++)
sum 1+= a[I][j];
if(sum1!=總和)
回歸?0;
sum 1 = 0;
}
for(sum1=0,sum2=0,i=0,j = 0;?我& ltn;?i++,j++){
sum 1+= a[I][j];
sum 2+= a[I][n-j-1];
}
if(sum1!=總和)
回歸?0;
if(sum2!=總和)
回歸?0;
其他
回歸?1;
}
作廢?ins(int?n)?{?//單個和偶數幻方的輸入
int?x,y,m;
x = 0;
y = n/2;
for(m = 1;?m & lt= n * n?m++){
a[x][y]= m;
if(m%n!=0){
x-;
y++;
if(x & lt;0)x = x+n;
if(y = = n)y = n-y;
}否則{
x++;
if(x = = n)x = x-n;
}
}
}
//?C++語言實現
//(1)求奇數幻方
# include & ltiostream.h & gt
# include & ltiomanip.h & gt
int?main(){
int?n,x,y,tot=0,I,j,a[100][100]= { 0 };
cout & lt& lt"請輸入壹個奇數"
CIN & gt;& gtn;
a[I = n/2][j = 0]= ++ tot;
I-;
j-;
while(tot & lt;=n*n){
我& lt0?I = n-1:I = I;
j & lt0?j = n-1:j = j;
if(a[i][j]){
I = x;
j = y+1;
}
a[I][j]= ++ tot;
x = I;
y = j;
I-;
j-;
}
for(I = 0;?我& ltn;?i++){
for(j = 0;?j & ltn;?j++)
cout & lt& ltsetw(3)& lt;& lta[I][j];
cout & lt& ltendl
}
回歸?0;
}
//(2)求單和偶的幻方。
# include & ltiostream.h & gt
# include & ltiomanip.h & gt
int?main(){
int?n,i=0,j=0,a[100][100],tot = 0;
cout & lt& lt"請輸入4的倍數"
CIN & gt;& gtn;
for(I = 0;?我& ltn;?i++)
for(j = 0;?j & ltn;?j++){
a[I][j]= ++ tot;
}
for(I = 0;?我& ltn;?i++){
for(j = 0;?j & ltn;?j++){
if(i%4==j%4||i%4+j%4==3)
a[I][j]= n * n+1-a[I][j];
}
}
for(I = 0;?我& ltn;?i++){
for(j = 0;?j & ltn;?j++){
cout & lt& ltsetw(4)& lt;& lta[I][j];
}
cout & lt& ltendl
}
回歸?0;
}