蓝桥杯 算法提高 开灯游戏

来源:互联网 发布:基站数据库下载 编辑:程序博客网 时间:2024/06/05 10:27
  算法提高 开灯游戏  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  有9盏灯与9个开关,编号都是1~9。

  每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的)。

  具体如下:

  第一个开关控制第二,第四盏灯;

  第二个开关控制第一,第三,第五盏灯;

  第三个开关控制第二,第六盏灯;

  第四个开关控制第一,第五,第七盏灯;

  第五个开关控制第二,第四,第六,第八盏灯;

  第六个开关控制第三,第五,第九盏灯;

  第七个开关控制第四,第八盏灯;

  第八个开关控制第五,第七,第九盏灯;

  第九个开关控制第六,第八盏灯。

  开始时所有灯都是熄灭的,开关是关闭着的。要求按下若干开关后,使得只有4盏灯亮着。
输出格式
  输出所有可能的方案,每行一个方案,每一行有9个字符,从左往右第i个字符表示第i个开关的状态("0"表示关闭,"1"表示打开),按字典序输出。下面的样例输出只是部分方案。
样例输出
000001011
000001110
000001111

#include<iostream>#include<string> #include<algorithm>using namespace std;int b[11];string s[100001]="";int main(){int a1,a2,a3,a4,a5,a6,a7,a8,a9,i,j,k=0;for(a1=0;a1<=1;a1++){for(a2=0;a2<=1;a2++){for(a3=0;a3<=1;a3++){for(a4=0;a4<=1;a4++){for(a5=0;a5<=1;a5++){for(a6=0;a6<=1;a6++){for(a7=0;a7<=1;a7++){for(a8=0;a8<=1;a8++){for(a9=0;a9<=1;a9++){//for(i=0;i<10;i++)//b[i]=0;fill(b,b+10,0);if(a1==0){b[2]=b[2];b[4]=b[4];}if(a1==1){b[2]=1-b[2];b[4]=1-b[4];}if(a2==0){b[1]=b[1];b[3]=b[3];b[5]=b[5];}if(a2==1){b[1]=1-b[1];b[3]=1-b[3];b[5]=1-b[5];}if(a3==0){b[2]=b[2];b[6]=b[6];}if(a3==1){b[2]=1-b[2];b[6]=1-b[6];}if(a4==0){b[1]=b[1];b[5]=b[5];b[7]=b[7];}if(a4==1){b[1]=1-b[1];b[5]=1-b[5];b[7]=1-b[7];}if(a5==0){b[2]=b[2];b[4]=b[4];b[6]=b[6];b[8]=b[8];}if(a5==1){b[2]=1-b[2];b[4]=1-b[4];b[6]=1-b[6];b[8]=1-b[8];}if(a6==0){b[3]=b[3];b[5]=b[5];b[9]=b[9];}if(a6==1){b[3]=1-b[3];b[5]=1-b[5];b[9]=1-b[9];}if(a7==0){b[4]=b[4];b[8]=b[8];}if(a7==1){b[4]=1-b[4];b[8]=1-b[8];}if(a8==0){b[5]=b[5];b[7]=b[7];b[9]=b[9];}if(a8==1){b[5]=1-b[5];b[7]=1-b[7];b[9]=1-b[9];}if(a9==0){b[6]=b[6];b[8]=b[8];}if(a9==1){b[6]=1-b[6];b[8]=1-b[8];}int ans=0;for(i=1;i<=9;i++){if(b[i]==1)ans++;}if(ans==4){s[k]=(a1+'0');s[k]+=(a2+'0');s[k]+=(a3+'0');s[k]+=(a4+'0');s[k]+=(a5+'0');s[k]+=(a6+'0');s[k]+=(a7+'0');s[k]+=(a8+'0');s[k]+=(a9+'0');k++;}}}}}}}}}}//cout <<k<<endl;for(i=0;i<k;i++){cout <<s[i]<<endl;}return 0;}