假設有 n 盞燈 (n 為不大於 5000 的正整數),從 1 到 n 按順序依次編號,初始時全部處於開啟狀態;有 m 個人 (m 為不大於 n 的正整數)也從 1 到 m 依次編號。
第乙個人 (1 號)將燈全部關閉,第二個人 (2 號)將編號為 2 的倍數的燈開啟,第三個人 (3號) 將編號為 3 的倍數的燈做相反處理(即,將開啟的燈關閉,將關閉的燈開啟)。依照編號遞增順序,以後的人都和 3 號一樣,將凡是自己編號倍數的燈做相反處理。
請問:當第 m 個人操作之後,哪幾盞燈是關閉的,按從小到大輸出其編號,其間用逗號間隔。
輸入正整數 n 和 m,以單個空格隔開。
順次輸出關閉的燈的編號,其間用逗號間隔。
10 10
1,4,9
思路:
思路:1.定義乙個 bool 陣列用作標記陣列,用來表示燈的狀態,下標表示燈的編號,值為 fasle 表示該燈滅,true 表示燈亮。因為第乙個人 (1 號)將燈全部關閉,所以陣列初始化為 false(全域性 bool 陣列會自動初始化為 false)。
const int n = 5e3 + 10;
bool light[n];
2.用 for 迴圈列舉 2~n,將編號為 2 的倍數的燈開啟(標記陣列對應置為 true),這裡迴圈變數 i 的變化為 i += 2(想一想為什麼)。
for (int i = 2; i <= n; i += 2)
3.將從編號為 3 的燈開始,將它們編號倍數的燈置為相反狀態:開的燈變滅,滅著的燈開啟(標記陣列為 false 置為 true,true 置為 false),這裡用雙層 for 迴圈來完成(注意內層迴圈變數 j 的變化是 j = j + i,想一想為什麼):
for (int i = 3; i <= m; i++)
}
4.最後輸出標記陣列的的值為 false 的對應的下標即可。 兩個燈的編號之間用逗號隔開,最後乙個編號後無逗號(迴圈變數 i != 1,輸出逗號,想一想為什麼)。
完整**:
#include using namespace std;
const int n = 5e3 + 10;
// 標記陣列,下標表示燈的編號,值為fasle表示該燈滅,true表示燈亮
bool light[n];
int main()
// 從編號為3的燈開始,將它們編號倍數的燈置為相反狀態
for (int i = 3; i <= m; i++)
} cout << 1; // 先將1輸出,因為編號為1的燈一定是關閉的
for (int i = 2; i <= n; i++)
} return 0;
}
小韋老師 神犇營 my0049 登入驗證
描述 我們在登入 的時候需要驗證密碼是否正確。現在請你寫乙個程式來驗證登入密碼是否正確。密碼為 5 位數。本題的輸入共 5 行,前 4 行是存進去的 4 個密碼,第 5 行是需要驗證的密碼,需要驗證該密碼是否為存進去的第三個密碼,若是,則輸出 yes 否則輸出 no 輸入本題的輸入共 5 行,前 4...
小韋老師 神犇營 my0163 完全數
求正整數 2 和 n 之間的完全數 一行乙個數 完全數 因子之和等於它本身的自然數,如 6 1 2 3 輸入n 1 n 5000 一行乙個數,按由小到大的順序。76破題 考查因子的概念和自定義函式。因子意思是 a 能被 b 整除 a b 0 則說明 b 是 a 的因子。思路 1.首先定義變數 n,並...
小韋老師 神犇營 my0074 資料加密
資料加密,是一門歷史悠久的技術,指通過加密演算法和加密金鑰將明文轉變為密文,而解密則是通過解密演算法和解密金鑰將密文恢復為明文。它的核心是密碼學。資料加密仍是計算機系統對資訊進行保護的一種最可靠的辦法。它利用密碼技術對資訊進行加密,實現資訊隱蔽,從而起到保護資訊的安全的作用。請你寫乙個程式,對資訊進...