開關燈問題(C++)


【問題描述】

       假設有 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;
  cin >> n >> m;
  int q[n+1]={0};
  for(int i=1;i<=m;i++){
    for(int j=1;j<=n;j++){
      if(j%i==0&&q[j]==0){
        q[j]=1;
      }
      else if(j%i==0&&q[j]==1){
        q[j]=0;
      }
    }
  }
  for(int i=1;i<=n;i++){
    if(q[i]==1){
      cout << i << " ";
    }
  }
  return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM