第三章第二题魔方



2.设计一个4*4魔方程序,让魔方的各行值的和等于各列值的和,并且等于两对角线值得和。例如,以下魔方:

31 3 5 25
9 21 19 15.
17 13 11 23
7 27 29 1

各行、各列以及两对角线值的和都是64.
【提示】:求4*4的魔方的一般步骤如下:
1)设置初始魔方的起始值和相邻元素之间的差值.例如上述魔方的初始魔方的起始值(first)和相邻元素之间的差值(step)分别为:

first=1 step=2
2)设置初始魔方元素的值,例如上述魔方的初始魔方为:
1 3 5 7
9 11 13 15
17 19 21 23
25 27 29 31
3)生成最终魔方.方法如下:
1
)求最大元素值与最小元素值的和sum,该实例的sum是:1+31=32
2
)用32减去初始魔方所有对角线上元素的值,然后将结果放在原来的位置,这样就可以求得最终魔方.
本题的魔法类magic的参考框架如下:

class magic 

{ 

public: 

         voidgetdata(); 

         voidsetfirstmagic(); 

         voidgeneratemagic(); 

         voidprintmagic(); 

private: 

         intm[4][4]; 

         intstep; 

         intfirst; 

         intsum; 

}; 


#include<iostream>  
#include<iomanip>  
using namespace std;  
class magic  
{  
public:  
	void getdata();  
	void setfirstmagic();  
	void generatemagic();  
	void printmagic();  
private:  
	int m[4][4];  
	int step;  
	int first;  
	int sum;  
};  
void magic::getdata()
{
	first=1;
	step=2;
}
void magic::setfirstmagic()
{	
	cout<<"初始的魔方为:"<<endl;
	int i,j,k=0;
	for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
		{
			m[i][j]=first;
			first+=step;
			k++;
			cout<<setw(4)<<m[i][j];
			if(k%4==0)
			cout<<endl;
		}
		
	}
}
void magic::generatemagic()
{
	int sum=0,i=0,j=0;
	sum=m[0][0]+m[3][3];
	for(i=0;i<4;i++) 
		for(j=0;j<4;j++) 
			if(i==j||i+j==3)  
				m[i][j]=sum-m[i][j];
}
void magic::printmagic() 
{
	cout<<"生成最终的魔方为:"<<endl;
	int i,j;  
	for(i=0;i<4;i++) 
	{  
		for(j=0;j<4;j++) 
		cout<<setw(4)<<m[i][j];
		cout<<endl;
	}
}
int main()  
{
	magic mof1; 
	mof1.getdata();  
	mof1.setfirstmagic(); 
	mof1.generatemagic(); 
	mof1.printmagic();
	system("pause");  
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值