2 solutions

  • 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;
    }
    

    Information

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