燈的開關狀態 模擬

2021-09-12 08:18:38 字數 1292 閱讀 4153

有 n 個燈放在一排,從 l 到 n 依次順序編號。有 n 個人也從 1 到 n 依次編號。l 號將燈全部關閉,2 號將凡是 2 的倍數的燈開啟;3 號將凡是 3 的倍數的燈作相反處理(該燈如為開啟的,則將它關閉;如關閉的,則將它開啟)。以後的人都和 3 號一樣,將凡是自己編號倍數的燈作相反處理。

程式設計實現:第 n 個人操作後,按順序輸出燈的狀態( 1 表示燈開啟,0 表示燈關閉)。

輸入格式

輸入乙個整數 n 表示燈的個數。

輸出格式

燈的狀態,用 01 序列表示,中間無空格。

資料範圍

2 ≤ n ≤2×10^6。

提示可以嘗試計算出前幾個,然後找規律。

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入

2樣例輸出

01解題思路1:

定義乙個陣列,下標代表燈的編號,利用雙迴圈對陣列賦值,比如,第乙個人把所有燈開啟,所有賦值為1,第二個人,把2的倍數的燈再加1,第三個人把3的倍數的燈加1,燈的開關與下表對應的數的奇偶性相關,奇數表示燈開,偶數表示燈關 。但是在計蒜客這裡面的平台上 有乙個測試點過不去 不知道哪兒有問題 如果有大佬 發現哪兒有問題 還望告知

思路:定義乙個陣列,下標代表燈的編號,利用雙迴圈對陣列賦值,比如,第乙個人把所有燈開啟,所有賦值為1,第二個人,把2的倍數的燈再加1,第三個人把3的倍數的燈加1,燈的開關與下表對應的數的奇偶性相關,奇數表示燈開,偶數表示燈關。。

#include #include #define ll long long

using namespace std;

const int maxn = 2000005;

int main()

} } for(ll i = 1; i <= n; i++)

cout << endl;

return 0;

}

經典競賽 開燈問題

有n盞燈,編號為1~n,第1個人把所有燈開啟,第2個人按下所有編號為2的倍數的開關(這些燈將被關掉),第3個人按下所有編號為3的倍數的開關(其中關掉的燈被開啟, 開著燈將被關閉),依此類推。一共有k個人,問最後有哪些燈開著?

輸入:n和k,輸出開著的燈編號。k≤n≤1000。

樣例輸入:7 3

樣例輸出:1 5 6 7

#include#include#includeint main()

}} for(j = 1;j <= n;j++)

printf("\n");

} return 0;

}

狀態模式解決燈開關狀態問題

clevercode最近在研究狀態設計模式,發現狀態設計模式能夠解決很多設計問題。當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.1 上下文環境 context 它定義了客戶程式需要的介面並維護乙個具體狀態角色的例項,將與狀態相關的操作委託給當前的concrete sta...

2032 燈的開關問題

time limit 20 second memory limit 20 mb 問題描述有n盞燈放在一排,從1到n依次編號,有n個人也從1到n依次編號,第乙個人將燈全部開啟,第二個人將凡是2的倍數的燈全部關閉,第三個人將凡是3的倍數的燈作相反處理,第4 5 n個人都把自己編號的倍數的燈作相反處理。問...

2032 燈的開關問題

time limit 20 second memory limit 20 mb 問題描述有n盞燈放在一排,從1到n依次編號,有n個人也從1到n依次編號,第乙個人將燈全部開啟,第二個人將凡是2的倍數的燈全部關閉,第三個人將凡是3的倍數的燈作相反處理,第4 5 n個人都把自己編號的倍數的燈作相反處理。問...