问题 : 开灯游戏

题目描述

算法提高  开灯游戏   
时间限制:1.0s     内存限制:256.0MB
     
问题描述
  有9盏灯与9个开关,编号都是1~9。

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

  具体如下:

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

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

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

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

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

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

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

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

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

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

000001111


题意很简单,根据输入打开或者关上灯,还是简单暴力求,9层循环跑01串的所有情况,对于每个串的每一次操作进行模拟开关灯即可。

#include<stdio.h>
#include<string.h>
int main()
{
    int x1,x2,x3,x4,x5,x6,x7,x8,x9,i,j,k,m,n;
    int a[20];//记录灯的状态
     
    for(x1=0;x1<=1;x1++)
    {
        for(x2=0;x2<=1;x2++)
            for(x3=0;x3<=1;x3++)
                for(x4=0;x4<=1;x4++)
                    for(x5=0;x5<=1;x5++)
                        for(x6=0;x6<=1;x6++)
                            for(x7=0;x7<=1;x7++)
                                for(x8=0;x8<=1;x8++)
                                    for(x9=0;x9<=1;x9++)//9层循环模拟所有情况
                                    {
                                        memset(a,0,sizeof(a));
                                        if(x1==1)
                                        {
                                            a[2]=(a[2]+1)%2; //每一次操作都加1然后对2取余可以直接记录灯的状态
                                            a[4]=(a[4]+1)%2; 
                                        }
                                        if(x2==1)
                                        {
                                            a[1]=(a[1]+1)%2; 
                                            a[3]=(a[3]+1)%2; 
                                            a[5]=(a[5]+1)%2; 
                                        }
                                        if(x3==1)
                                        {
                                            a[2]=(a[2]+1)%2; 
                                            a[6]=(a[6]+1)%2; 
                                        }
                                        if(x4==1)
                                        {
                                            a[1]=(a[1]+1)%2; 
                                            a[5]=(a[5]+1)%2; 
                                            a[7]=(a[7]+1)%2; 
                                        }
                                        if(x5==1)
                                        {
                                            a[2]=(a[2]+1)%2; 
                                            a[4]=(a[4]+1)%2;
                                            a[6]=(a[6]+1)%2; 
                                            a[8]=(a[8]+1)%2;  
                                        }
                                        if(x6==1)
                                        {
                                            a[3]=(a[3]+1)%2; 
                                            a[5]=(a[5]+1)%2; 
                                            a[9]=(a[9]+1)%2; 
                                        }
                                        if(x7==1)
                                        {
                                            a[4]=(a[4]+1)%2; 
                                            a[8]=(a[8]+1)%2; 
                                        }
                                        if(x8==1)
                                        {
                                            a[5]=(a[5]+1)%2; 
                                            a[7]=(a[7]+1)%2; 
                                            a[9]=(a[9]+1)%2; 
                                        }
                                        if(x9==1)
                                        {
                                            a[6]=(a[6]+1)%2; 
                                            a[8]=(a[8]+1)%2; 
                                        }
                                        int f=0;
                                        for(i=1;i<=9;i++)
                                        {
                                        //  printf("%d ",a[i]);
                                            if(a[i]==1)
                                                f++;
                                        }
                                    //  printf("\n");
                                        if(f==4)//判断开灯得数量
                                        {
                                            printf("%d%d%d%d%d%d%d%d%d\n",x1,x2,x3,x4,x5,x6,x7,x8,x9);
                                        }
                                    }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/seven_deadly_sins/article/details/79700338