• 开关灯问题(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;
    }

     

  • 相关阅读:
    常用模块——time模块,datetime模块
    开发目录的规范

    模块
    day17作业
    面向过程编程
    函数递归
    谈谈作为一个菜B的培训感受
    絮叨机房精密空调的制冷剂
    接入机房产生冷凝水
  • 原文地址:https://www.cnblogs.com/dongks/p/10306073.html
Copyright © 2020-2023  润新知