一共有五个开关,当开关为开的时候就要发生fun事件。
for (int i = 0; i < 1 << 5; i++)
for (int j = 0; j < 5; j++)
if (i >> j & 1)
fun();
枚举00000 到 11111(2进制)
每一位是1则发生fun
相关题目:
费解的开关
飞行员兄弟
附上费解的开关代码
#include <iostream>
#include <cstring>
#include<algorithm>
const int INF = 100000;
using namespace std;
char num[10][10];
int tx[5] = { 0,0,-1,0,1 };
int ty[5] = { 0,1,0,-1,0 };
void turn(int x,int y)
{
for (int i = 0; i < 5; i++)
{
int nx = tx[i] + x;
int ny = ty[i] + y;
num[nx][ny] ^= 1;
}
}
int work()
{
int ans = INF;
char backup[10][10];
memcpy(backup, num, sizeof num);
for (int i = 0; i < 1 << 5; i++)
{
int res = 0;
for (int j = 0; j < 5; j++)
{
if (i >> j & 1)
{
res++;
turn(0, j);
}
}
for(int i=0;i<4;i++)
for (int j = 0; j < 5; j++)
{
if (num[i][j] == '0')
{
res++;
turn(i + 1, j);
}
}
bool is_successful = true;
for (int j = 0; j < 5; j++)
if (num[4][j] == '0')
{
is_successful = false;
break;
}
if (is_successful) ans = min(ans, res);
memcpy(num, backup, sizeof(backup));
}
if (ans > 6)return -1;
return ans;
}
int main()
{
int n;
cin >> n;
while (n--)
{
for (int i = 0; i < 5; i++)
cin >> num[i];
cout << work() << endl;
}
return 0;
}