求4*4的魔方的一般步骤如下:
设置初始魔方的起始值和相邻元素之间的差值。例如上述魔方的初始魔方的起始值(first)和相邻元素之间的差值(step)分别为:first=1; step=2;
设置初始魔方元素的值,例如上述魔方的初始魔方为:
1 3 5 7
9 11 13 15
17 19 21 23
25 27 29 31
生成最终魔方。方法如下:
求最大元素值与最小元素值的和sum,该实例的sum是:1+31=32
用32减去初始魔方所有对角线上元素的值,然后将结果放在原来的位置,这样就可以求得最终魔方。
#include<iostream>
using namespace std;
class Mj
{
public:
void getdata();//输入数据的成员函数;
void getfirstmafic();//对数组进行赋值;
void generatemagic();//对数组进行运算;
void printmagic();//输出结果:
private:
int m[4][4];//定义一个四维数组;
int step;//差值;
int first;//第一个值;
int sum;//最大值;
};
void Mj::getdata()
{
cin>>first>>step>>sum;//输入初始值、差值、最大值;
}
void Mj::getfirstmafic()
{
int a,b;
a=first;
b=step;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
m[i][j]=a;//进行对数组的赋值;
a+=b;
}
}
}
void Mj::generatemagic()
{
for(int i=0;i<4;i++)
{
m[i][i]=sum-m[i][i];//对对角线上的值进行运算;
m[i][3-i]=sum-m[i][3-i];//对副对角线上的值运算:
}
}
void Mj::printmagic()
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
cout<<m[i][j]<<ends;//输出数组;
}
cout<<endl;
}
}
int main()
{
Mj t1;//定义一个类的对象;
t1.getdata();//调用成员函数;
t1.getfirstmafic();
t1.generatemagic();
t1.printmagic();
return 0;
}