zoukankan      html  css  js  c++  java
  • 开关灯问题(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;
    }

     

  • 相关阅读:
    五月杂题选做
    BJOI 2021 游记&题解
    U149858
    CF1037简要题解
    CF Round706简要题解
    联合省选 2020
    九省联考 2018 IIIDX
    九省联考 2018 秘密袭击
    AGC006F Balckout
    概率生成函数学习笔记
  • 原文地址:https://www.cnblogs.com/dongks/p/10306073.html
Copyright © 2011-2022 走看看