#include <iostream.h>
void huanfang(int );
void main(){
int shu=3;
cout<<"请输入n阶幻方n的值"<<endl;
while(shu>=1){
cin>>shu;
huanfang(shu);
cout<<endl;
cout<<"请再次输入n阶幻方n的值"<<endl;
}
}
void huanfang(int q){
int n=1,m=1,j=0,k=0;
if( q%2!=0 ){
m=n=q
int **a=new int*[n];
for(int x=0;x<n;x++)
a[x]=new int[n];
{
a[n-1][(n-1)/2]=1;
j=n-1;k=(n-1)/2;
for(int i=2;i<=n*n;i++){
if(i%n==1){a[j-1][k]=i;
j=j-1;k=k; continue ;
}
if(j+1>m-1){
a[0][k+1]=i;
j=0;k=k+1;
continue;}
if(k+1>m-1){
a[j+1][0]=i;
j=j+1;k=0;
continue;}
{a[j+1][k+1]=i;
j=j+1;k=k+1;}}
for(int p=0 ;p<n;p++){
for(int i=0;i<n;i++){
{
cout.width(6);
cout << a[p][i];
}
}
cout<<endl;}
}
}
else
{ cout<<"错误!请输入奇数的n值"<<endl; }
}
/*
注意:上面代码在释放分配的内存时要特别注意。
因为这是“深度内存分配”,所以释放时,要对每个单元里的指针指向的内存予以释放。
释放内存代码如下:
for(i=0;i<n;i++)
delete[] a[i];
delete[] a;
*/