• 开灯游戏


    问题描述
      有9盏灯与9个开关,编号都是1~9。

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

      具体如下:

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

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

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

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

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

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

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

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

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

      开始时所有灯都是熄灭的,开关是关闭着的。要求按下若干开关后,使得只有4盏灯亮着。
    输出格式
      输出所有可能的方案,每行一个方案,每一行有9个字符,从左往右第i个字符表示第i个开关的状态("0"表示关闭,"1"表示打开),按字典序输出。下面的样例输出只是部分方案。
    样例输出
    000001011
    000001110
    000001111
     
    #include<stdio.h>
    void node();
    int q,b,c,d,e,f,g,h,j;
    int main()
    {
        
        for(q=0;q<2;q++)
        {
        
        for(j=0;j<2;j++)
            {
        
                for(b=0;b<2;b++)
                {
                
                
                     for(c=0;c<2;c++)
                    {
            
                          for(d=0;d<2;d++)
                        {
                    
                             for(e=0;e<2;e++)
                            {
                        
                                   for(f=0;f<2;f++)
                                {
                                    
                                    for(g=0;g<2;g++)
                                    {
                                        
                                        for(h=0;h<2;h++)
                                        {
                                            node();
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return 0;
    }
    
    void node()
    {
        int m=0,n,a[10]={0};
        if( q ) { a[2] = ( a[2] + 1 ) % 2; a[4] = ( a[4] + 1 ) % 2; }  
        if( j ) { a[1] = ( a[1] + 1 ) % 2; a[3] = ( a[3] + 1 ) % 2; a[5] = ( a[5] + 1 ) % 2; }  
        if( b ) { a[2] = ( a[2] + 1 ) % 2; a[6] = ( a[6] + 1 ) % 2; }  
        if( c ) { a[1] = ( a[1] + 1 ) % 2; a[5] = ( a[5] + 1 ) % 2; a[7] = ( a[7] + 1 ) % 2; }  
        if( d ) { 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( e ) { a[3] = ( a[3] + 1 ) % 2; a[5] = ( a[5] + 1 ) % 2; a[9] = ( a[9] + 1 ) % 2; }  
        if( f ) { a[4] = ( a[4] + 1 ) % 2; a[8] = ( a[8] + 1 ) % 2; }  
        if( g ) { a[5] = ( a[5] + 1 ) % 2; a[7] = ( a[7] + 1 ) % 2; a[9] = ( a[9] + 1 ) % 2; }  
        if( h ) { a[6] = ( a[6] + 1 ) % 2; a[8] = ( a[8] + 1 ) % 2; } 
         for(n=1;n<=9;n++)
         {
             if(a[n]==1)m++;
             }
             if(m==4)printf("%d%d%d%d%d%d%d%d%d
    ",q,j,b,c,d,e,f,g,h);    
    }

    注释:需要些小函数了,有些问题只在主函数里些会让事情变得复杂;

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/saber114567/p/8399177.html
Copyright © 2020-2023  润新知