题目
思路
首先应该想到熄灯问题,熄灯问题是使枚举简单化,找到唯一的一种情况列举。此题目与熄灯问题相似,只要按下搜索到的与目标密码不同密码的后一位密码即可,这样便可以连带改变搜索到的那一位密码,当遍历后只需比较最后一位密码即可,相同则输出
举例
1010
0000
第一位不同,则要改变第二位密码,连带将第一位也转变
即
0100
0000
继续搜索发现第二位不同则按下第三位密码
即
0011
0000
就这样依次搜索
特殊情况
也有特殊的情况
比如
110
000
如果再像刚才那样搜索得到的结果就是inpossible,这就需要按下第一位密码然后再遍历
代码
#include<iostream>
#include <string>
#include <cstring>
using namespace std;
void SetBit(int &a,int i,int v)
{
if( v )
a |= ( 1 << i);
else
a &= ~( 1 << i);