注册 登录
编程论坛 C++教室

帮我指一下魔方程序错在哪

情叶 发布于 2010-03-31 21:45, 692 次点击
#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
写出来后结果输出不对不知错在哪
4 回复
#2
情叶2010-03-31 21:46
找高手啊
#3
yyblackyy2010-04-01 12:35
#include<iostream> //我用的是VC6
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;
}
}
void magic::generatemagic()
{
sum=m[0][0]+m[3][3];
for(i=0;i<4;i++)      //你没有循环
    for(j=0;j<4;j++)
    {
        if(i+j==3||i==j)
    m[i][j]=sum-m[i][j];
    }
}
void magic::printmagic()
{
for(i=0;i<4;i++)           //你没有循环
    for(j=0;j<4;j++)
    {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.generatemagic();//你这里错了 函数的顺序错了
g.printmagic();
return 0;
}
#4
情叶2010-04-01 12:55
谢谢     嘿嘿
#5
xieyajiang2012-03-06 11:41
终于我也懂了 谢谢
1