演算法提高 開燈遊戲

2021-07-26 04:25:17 字數 1227 閱讀 5315

演算法提高 開燈遊戲  

時間限制:1.0s   記憶體限制:256.0mb

問題描述

有9盞燈與9個開關,編號都是1~9。

每個開關能控制若干盞燈,按下一次會改變其控制的燈的狀態(亮的變成不亮,不亮變成亮的)。

具體如下:

第乙個開關控制第二,第四盞燈;

第二個開關控制第一,第三,第五盞燈;

第三個開關控制第二,第六盞燈;

第四個開關控制第一,第五,第七盞燈;

第五個開關控制第二,第四,第六,第八盞燈;

第六個開關控制第三,第五,第九盞燈;

第七個開關控制第四,第八盞燈;

第八個開關控制第五,第七,第九盞燈;

第九個開關控制第六,第八盞燈。

開始時所有燈都是熄滅的,開關是關閉著的。要求按下若干開關後,使得只有4盞燈亮著。

輸出格式

輸出所有可能的方案,每行乙個方案,每一行有9個字元,從左往右第i個字元表示第i個開關的狀態("0"表示關閉,"1"表示開啟),按字典序輸出。下面的樣例輸出只是部分方案。

樣例輸出

000001011

000001110

000001111

思路分析:我的做法是暴力列舉。定義9個開關變數,設定兩種不同的狀態0和1(代表關、開)。列舉每一種可能的情況,並進行判斷。資料比較小,所以方案可行,就是**比較繁瑣。

另外一種思路是用字串每次加1的過程:從000000000一直加到111111111,寫乙個字串模擬大數加法的過程,實質也是列舉每一種情況的過程。

不知道這道題位運算能不能做,我對位運算的掌握不是很熟練。

#include #include using namespace std;

int l1, l2, l3, l4, l5, l6, l7, l8, l9;

int a[10] = ;

void judge()

if( l2 )

if( l3 )

if( l4 )

if( l5 )

if( l6 )

if( l7 )

if( l8 )

if( l9 )

int cnt = 0;

for( int i = 1; i <= 9; i++ )

if( cnt == 4 )

}int main()

return 0;

}

藍橋杯 演算法提高 開燈遊戲

回溯加判斷,注意在改變燈的狀態的時候要用引用,要不然燈的值不會發生改變 然後在每次判斷輸出完之後要清空一下燈的狀態否則會出錯 include include using namespace std int k 10 int d 10 void change int i void judge else...

演算法提高 開燈遊戲 回溯法

題目鏈結 有9盞燈與9個開關,編號都是1 9。每個開關能控制若干盞燈,按下一次會改變其控制的燈的狀態 亮的變成不亮,不亮變成亮的 具體如下 第乙個開關控制第二,第四盞燈 第二個開關控制第一,第三,第五盞燈 第三個開關控制第二,第六盞燈 第四個開關控制第一,第五,第七盞燈 第五個開關控制第二,第四,第...

藍橋杯 演算法提高VIP 開燈遊戲

題目 1520 藍橋杯 演算法提高vip 開燈遊戲 時間限制 1sec 記憶體限制 128mb 提交 499 解決 241 題目描述 有9盞燈與9個開關,編號都是1 9。每個開關能控制若干盞燈,按下一次會改變其控制的燈的狀態 亮的變成不亮,不亮變成亮的 具體如下 第乙個開關控制第二,第四盞燈 第二個...