2 solutions

  • 0
    @ 2024-11-29 19:26:53

    #include<bits/stdc++.h> using namespace std; const int N=1e7; int a[N]; int main() { int n,m,i,t,cnt=0; cin>>n>>m; for(i=1;i<=n;i++){ a[i]=0; } for(t=2;t<=m;t++){ for(i=t;i<=n;i=i+t){ if(a[i]==0){ a[i]=1; }else if(a[i]==1){ a[i]=0; } } } for(i=1;i<=n;i++){ if(a[i]0){ if(cnt0){ cout<<i; cnt++; } else{ cout<<","<<i; } } } return 0; }

    • 0
      @ 2024-3-19 11:07:59
      #include<stdio.h>
      #include<stdbool.h>
      
      int main(){
          int n,m;
          scanf("%d %d",&n,&m);
          int i;
          if(m==1){ //只有一个人直接输出所有
              for(i=0;i<n-1;i++){
                  printf("%d,",i+1);
              }
              printf("%d",n);
              return 0;
          }else{
              bool light[n]; //记录灯开/关
              for(i=0;i<=n;i++){
                  light[i]=false;  //初始化灯,默认第一个人已经关闭全部灯。
              }
              int j=1;
              while(j!=m){  //依次遍历m个人操作灯
                  j++;
                  for(i=1;i<=n;i++){
                      if(i%j==0){
                          light[i]=!light[i];  //为倍数时,取反。
                      }
                  }
              }
              int flag=0;
              for(i=1;i<=n;i++){
                  if(light[i]==false&&flag==0){  //格式问题,第一个不输出“,”
                      flag=1;
                      printf("%d",i);
                  }else if(light[i]==false){
                      printf(",%d",i);  //依次输出灯关闭的下标
                  }
              }
          }
          return 0;
      }
      
      • 1

      Information

      ID
      6772
      Time
      1000ms
      Memory
      128MiB
      Difficulty
      8
      Tags
      (None)
      # Submissions
      186
      Accepted
      33
      Uploaded By