#include<iostream.h>
#include<iomanip.h>
#define N  100
int main()
{  
 int a[N][N],n;
 cout<<"请输入魔方阶数n= "<<endl; 
 cin>>n;
 for(int i=0;i<n;i++)      
  for(int j=0;j<n;j++) 
   a[i][j]=0; 
  if(!(n%2)) 

  {   
   cout<<"魔方阶数输入不正确,程序结束。"<<endl;      
   return  0;   
  }

  
  int p,q; 
  p=0,q=(n-1)/2; 
  a[0][q]=1; 

  for(i=2;i<=n*n;i++) 
  {      
   p=(p-1+n)%n;
   q=(q-1+n)%n;  
   while(a[p][q]>0)     
   {       
    p=(p+2)%n;    
    q=(q+1)%n;   
      }      
   a[p][q]=i; 
  } 

  cout<<"魔幻方阵输出为:"<<endl;
  for(i=0;i<n;i++)  
  {       
   for(int j=0;j<n;j++)   
    cout<<setw(4)<<a[i][j]; 
   cout<<endl;  
   }  
  return 1;
}

只输入奇数

如:

请输入魔方阶数n=
3
魔幻方阵输出为:
   6   1   8
   7   5   3
   2   9   4
以下部分没看懂,跪求指点:

for(i=2;i<=n*n;i++) 
  {      
   p=(p-1+n)%n;
   q=(q-1+n)%n;  
   while(a[p][q]>0)     
   {       
    p=(p+2)%n;    
    q=(q+1)%n;   
      }      
   a[p][q]=i; 
  }