帮我指一下魔方程序错在哪
#include "stdafx.h"#include<iostream>
using namespace std;
class magic
{ public:
void getdata();
void setfirstmagic();
void generatemagic();
void printmagic();
private:
int i,j;
int m[4][4];
int step;
int first;
int sum;
};
void magic::getdata()
{cout<<"请输入起始值和差值:"<<endl;
cin>>first>>step;
}
void magic::setfirstmagic()
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
m[i][j]=first+(i*4+j)*step;
j=0;
}
}
void magic::generatemagic()
{
sum=m[0][0]+m[3][3];
if(i+j==3||i==j)
m[i][j]=sum-m[i][j];
}
void magic::printmagic()
{
if(j<3)
cout<<m[i][j]<<' ';
if(j==3)
cout<<m[i][j]<<endl;
}
int main(int argc, char* argv[])
{magic g;
g.getdata();
g.setfirstmagic();
g.printmagic();
g.generatemagic();
g.printmagic();
return 0;
}
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)生成最终魔方。方法如下:
①求最大元素值与最小元素值的和sum,该实例的sum是:
1+31=32
②用32减去初始魔方所有对角线上元素的值,然后将结果放在原来的位置,这样就可求得最终魔方。本例最终魔方如下:
31 3 5 25
9 21 19 15
17 13 11 23
7 27 29 1
写出来后结果输出不对不知错在哪