041day(熄灯问题的程序和构造函数的学习)

来源:互联网 发布:更改计算机端口号 编辑:程序博客网 时间:2024/06/14 10:45

172210704111-陈国佳总结《2017年11月20日》【连续041天】

标题:熄灯问题的程序和构造函数的学习;

内容:A.观看MOOC(三)2.2;

B.a.昨天的程序经过排查,发现一个++i写成了+i;此解法重点运用了位运算来优化程序;

int GetBit(char c,int i){
return(c>>i)& 1;
}
void SetBit(char& c,int i,int v){
if(v)    c |=(1<<i);
else   c&= ~(1<<i);
}
void Flip(char&c,int i){
c ^=(1<<i);
}
void OutputResult(int t,char result[])
{
cout<<"PUZZLE #"<<t<<endl;
for(int i=0;i<5;++i){
for(int j=0;j<6;++j){
cout<<GetBit(result[i],j);
if(j<5)
   cout<<" ";
   }cout<<endl;
}
}
int main()
{
char oriLights[5];
char lights[5];
char result[5];
char switchs;
int T;
cin>>T;
for(int t=1; t<=T;++t){
memset(oriLights,0,sizeof(oriLights));
for(int i=0;i<5;i++){
for(int j=0;j<6;++j){
int s;
cin>>s;
SetBit(oriLights[i],j,s);
}
}
for(int n=0;n<64;++n){
memcpy(lights,oriLights,sizeof(oriLights));
switchs =n;
for (int i=0;i<5;++i){
result[i]=switchs;
for(int j=0;j<6;++j){
if(GetBit(switchs,j)){
if(j>0) Flip(lights[i],j-1);
Flip(lights[i],j);
if(j<5)Flip(lights[i],j+1);
}
}
       if(i<4)
          lights[i+1]^=switchs;
 switchs=lights[i];  
}
if(lights[4]==0){
OutputResult(t,result);
break;
}
}
}
return 0;
}


(b).构造函数(Constructor)

成员函数的一种,可以有参数,不能有返回值(void也不行)

作用是对对象进行初始化;

如果定义类时没写构造函数,则编译器自动生成一个默认的无参数构造函数;此函数不足任何操作;

一个类可以有多个构造函数;

class Complex{private: double real,imag;    public: Complex(double r,double i=0);};

Complex::Complex(double r,double i){real = r; imag=i;}

Complex c1;   //error,缺参数

Complex*pc=new Complexl     //error,同上;

Complex c1(2);   //OK        Complex c1(2,4),c2(3,5);

多个构造函数,参数个数或 类型不同(类似于重载函数);

构造函数最好是public;

class Test{public: Test(int n){ }   //(1)      Test(int n,int m){ }  //(2)   Test() { }  //(3)};

Test array1[3]={1,Test(1,2)};  //3个元素,分别用(1)(2)(3)初始化;

Test array2[3]={Test(2,3),Test(1,2),1};     //3个元素分别用(2)(2)(1)初始化;

Test *pArray[3]={new Test(4),new Test(1,2)}; //2个元素分别用(1)(2)初始化;

明日计划:学习复制构造函数;

阅读全文
0 0
原创粉丝点击