有 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個人都把自己編號的倍數的燈作相反處理。問...