#include <iostream>
#include <iomanip>
using namespace std;
//僅用於雙偶數幻方
void magic(int col)
{
//定義動態二維陣列
int i,j,m,n;
int **magic = new int *[col];
for(i=0;i<col;i++)
magic[i] = new int [col];
//初始化二維陣列
for(j=0;j<col;j++)
magic[i][j] = i*col+j+1;
//對角線上的數取補
for(i=0;i<col;i+=4)
for(j=0;j<col;j+=4)
for(m=i;m<i+4;m++)
for(n=j;n<j+4;n++)
if((m%4)==(n%4) || ((m%4)+(n%4)) == 3 )
magic[m][n] = col*col+1 - magic[m][n];
}
cout<<"magic("<<col<<") = \n";
cout<<"\t";
cout<<setw(3)<<magic[i][j]<<" ";
cout<<endl;
delete [] magic[i];
delete [] magic;
這是我自己寫的介面函式,可以用來計算任何4*n的魔法(主函式你自己隨便寫個就ok)。
#include <iostream>
#include <iomanip>
using namespace std;
//僅用於雙偶數幻方
void magic(int col)
{
//定義動態二維陣列
int i,j,m,n;
int **magic = new int *[col];
for(i=0;i<col;i++)
magic[i] = new int [col];
//初始化二維陣列
for(i=0;i<col;i++)
for(j=0;j<col;j++)
magic[i][j] = i*col+j+1;
//對角線上的數取補
for(i=0;i<col;i+=4)
for(j=0;j<col;j+=4)
{
for(m=i;m<i+4;m++)
for(n=j;n<j+4;n++)
if((m%4)==(n%4) || ((m%4)+(n%4)) == 3 )
magic[m][n] = col*col+1 - magic[m][n];
}
cout<<"magic("<<col<<") = \n";
for(i=0;i<col;i++)
{
cout<<"\t";
for(j=0;j<col;j++)
cout<<setw(3)<<magic[i][j]<<" ";
cout<<endl;
}
for(i=0;i<col;i++)
delete [] magic[i];
delete [] magic;
}
這是我自己寫的介面函式,可以用來計算任何4*n的魔法(主函式你自己隨便寫個就ok)。