31:开关灯
原題鏈接
總時間限制:?假設有N盞燈(N為不大于5000的正整數),從1到N按順序依次編號,初始時全部處于開啟狀態;有M個人(M為不大于N的正整數)也從1到M依次編號。
第一個人(1號)將燈全部關閉,第二個人(2號)將編號為2的倍數的燈打開,第三個人(3號)將編號為3的倍數的燈做相反處理(即,將打開的燈關閉,將關閉的燈打開)。依照編號遞增順序,以后的人都和3號一樣,將凡是自己編號倍數的燈做相反處理。
請問:當第M個人操作之后,哪幾盞燈是關閉的,按從小到大輸出其編號,其間用逗號間隔。
源碼
#include <iostream> using namespace std; int main() {int N, M, i, j, index=0;bool on[5001]; // 記錄燈的開關狀態cin >> N >> M;for (i=0; i<5001; i++) on[i] = false; // 第1人for (i=2; i<=M; i++){ // 從第2個人開始模擬for (j=i; j<=N; j+=i){on[j] = !on[j];}}for (i=1; i<=N; i++){if (!on[i]){if (index == 0) cout << i;else cout << "," << i;index++;}}cout << endl;return 0; }
總結
- 上一篇: python在线代码编辑器-5种最佳Py
- 下一篇: 决策树实现鸢尾花分类