設計一個4*4魔方程式,讓魔方的各行值的和等於各列值的和,並且等於兩對角線的和,例如以下魔方,各行各列及兩對角線值的和都是64.
阿新 • • 發佈:2018-12-18
求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; }