就是當第一行開關按下後燈狀態確定,向下逐行可以有乙個確定的開關狀態使得上一行的燈一定全部熄滅,直到最後一行檢查是否也全部熄滅,如果是則得到結果。這裡只需要列舉第一行所有開關的狀態即可,更巧妙的是可以採用二進位制位運算節省空間。
#include
#include
#include
using
namespace std;
char orilights[5]
;//原始燈狀態
char lights[5]
;//改變後燈狀態
char result[5]
;//結果開關狀態
intgetbit
(char c,
int i)
void
setbit
(char
& c,
int i,
int v)
else
}void
flipbit
(char
& c,
int i)
void
outputresult
(int t,
char result)
cout << endl;}}
intmain()
for(
int n =
0; n <64;
++n)}if
(i <4)
//第i+1行燈狀態改變
lights[i +1]
^= switchs;
switchs = lights[i]
;//要讓本行全熄滅,下一行開關狀態已經確定}if
(lights[4]
==0)}
}}
列舉 熄燈問題
有乙個由按鈕組成的矩陣,5行6列,每按一次改變原來顏色 具體事例如下圖所示 請寫乙個程式,判斷需要按哪些按鈕,能夠是燈泡全部熄滅。相關問題細節不再重複 剛剛輸入 2 0 1 1 0 1 0 1 0 0 1 1 1 0 0 1 0 0 1 1 0 0 1 0 1 0 1 1 1 0 0 0 0 1 0...
熄燈問題 詳解
說明 演算法並非原創,於網上大神,本文只是對演算法進行詳細的解釋。題目 noi openjudge 有乙個由按鈕組成的矩陣,其中每行有6個按鈕,共5行。每個按鈕的位置上有一盞燈。當按下乙個按鈕後,該按鈕以及周圍位置 上邊 下邊 左邊 右邊 的燈都會改變一次。即,如果燈原來是點亮的,就會被熄滅 如果燈...
熄燈問題 列舉
1 問題描述 有乙個由按鈕組成的矩陣,其中每行有6個按鈕,共 5行。每個按鈕的位置上有一盞燈。當按下乙個按鈕後,該按鈕以及周圍位置 上邊 下邊 左邊 右邊 的燈都會改變一次。即,如果燈原來是點亮的,就會被熄滅 如果燈原來是熄滅的,則會被點亮。在矩陣角上的按鈕改變 3盞燈的狀態 在矩陣邊上的按鈕改變 ...