公众号:CppCoding
题目描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190924085238505.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNTk4ODY1,size_16,color_FFFFFF,t_70)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <memory>
using namespace std;
int T;
char oriLights[10];
char LIghts[10];
char result[10];
int GetBit(char c,int i){
return (c>>i)&1;
}
void SetBit(char &c,int i,int v){
if(v){
c=c|(1<<i);
}else{
c=c&~(1<<i);
}
}
void FilpBit(char &c,int i){
c=c^(1<<i);
}
void OutputResult(int t){
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 << " " ;
else
cout << endl;
}
}
}
int main(){
cin >> T;
char switches;
for(int t=1;t<=T;t++){
memset(oriLights,0,sizeof(oriLights));
int v;
for(int i=0;i<5;i++){
for(int j=0;j<6;j++){
cin >> v;
SetBit(oriLights[i],j,v);
}
}
for(char c=0;c<64;c++){
memcpy(Lights,oriLights,sizeof(oriLights));
switches=c;
for(int i = 0; i < 5; i ++)
{
result[i] = switches;
for(int j = 0; j < 6; j ++)
if(GetBit(switches, j))
{
if(j > 0)
FilpBit(Lights[i], j - 1);
FilpBit(Lights[i], j);
if(j < 5)
FilpBit(Lights[i], j + 1);
}
if(i < 4)
Lights[i + 1] ^= switches;
switches = Lights[i];//本行剩下的亮着的灯,就是下一行的开关
}
if(Lights[4] == 0)
{
OutputResult(t);
break;
}
}
}
}