C 基礎演算法學習 熄燈問題

2022-01-29 11:26:33 字數 1401 閱讀 7409

有乙個由按鈕組成的矩陣, 其中每行有6個按鈕, 共5行

– 每個按鈕的位置上有一盞燈

– 當按下乙個按鈕後, 該按鈕以及周圍位置(上邊, 下邊,

左邊, 右邊)的燈都會改變狀態

26熄燈問題 poj1222

– 如果燈原來是點亮的, 就會被熄滅

– 如果燈原來是熄滅的, 則會被點亮

• 在矩陣角上的按鈕改變3盞燈的狀態

• 在矩陣邊上的按鈕改變4盞燈的狀態

• 其他的按鈕改變5盞燈的狀態

27熄燈問題 poj1222

 與一盞燈毗鄰的多個按鈕被按下時,乙個操作會抵消另一次操

作的結果

 給定矩陣中每盞燈的初始狀態,求一種按按鈕方案,使得所有

的燈都熄滅熄燈問題 poj1222

 輸入:

– 第一行是乙個正整數n, 表示需要解決的案例數

– 每個案例由5行組成, 每一行包括6個數字

– 這些數字以空格隔開, 可以是0或1

– 0 表示燈的初始狀態是熄滅的

– 1 表示燈的初始狀態是點亮的

29熄燈問題 poj1222

 輸出:

– 對每個案例, 首先輸出一行,

輸出字串 「puzzle #m」, 其中m是該案例的序號

– 接著按照該案例的輸入格式輸出5行

• 1 表示需要把對應的按鈕按下

• 0 表示不需要按對應的按鈕

• 每個數字以乙個空格隔開

**如下:

#include #include

using

namespace

std;

char oright[5

];char light[5

];char result[5

];void setchar(char & t,int j,int

s);void output(char *t);

int getchar(char t,int

j);void flip(char & s,int

i);int

main()

}for(int i=0;i<64;i++)

}if(j<4

) light[j+1]^=switches;

switches=light[j];

}if(light[4]==0

)

}return0;

}void flip(char & s,int

i)int getchar(char t,int

j)void setchar(char & t,int j,int

s)void output(char *t)

cout

<}

}

熄燈問題 學習筆記

就是當第一行開關按下後燈狀態確定,向下逐行可以有乙個確定的開關狀態使得上一行的燈一定全部熄滅,直到最後一行檢查是否也全部熄滅,如果是則得到結果。這裡只需要列舉第一行所有開關的狀態即可,更巧妙的是可以採用二進位制位運算節省空間。include include include using namespa...

C 基礎演算法學習 猜假幣

有12枚硬幣。其中有11枚真幣和1枚假幣。假幣和真 幣重量不同,但不知道假幣比真幣輕還是重。現在,用一架天平稱了這些幣三次,告訴你稱的結果,請你 找出假幣並且確定假幣是輕是重 資料保證一定能找 出來 例題 poj1013 稱硬幣 輸入 第一行是測試資料組數。每組資料有三行,每行表示一次稱量的結果。銀...

C 基礎演算法學習 生理週期

人有體力 情商 智商的高峰日子,它們分別每隔 23天 28天和33天出現一次。對於每個人,我們想 知道何時三個高峰落在同一天。給定三個高峰出現 的日子p,e和i 不一定是第一次高峰出現的日子 再給定另乙個指定的日子d,你的任務是輸出日子d 之後,下一次三個高峰落在同一天的日子 用距離d 的天數表示 ...