• 数据结构练习


    计算灯的开关状态

    有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 1 到 N 依次编号。1 号将灯全部关闭,2号将凡是 2 的倍数的灯打开;3 号将凡是 3 的倍数的灯作相反处理(该灯如为打开的, 则将它关闭;如关闭的,则将它打开)。以后的人都和 3 号一样,将凡是自己编号倍数的灯作相反处理。试计算第 N 个操作后,哪几盏灯是点亮的。(0-表示灯打开,1-表示灯关闭)

    输入 :N

    输出:每盏灯的状态


    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
        int N, i;
        unsigned int *p;
        
        scanf("%d", &N);
        
        p = (unsigned int*)malloc(sizeof(unsigned int)*N);
        memset(p, 0, sizeof(unsigned int)*N);
        
        for(int k = 1; k <= N; ++k){
            
            if (k == 1){
                continue;
            }else if (k == 2){
                for (i = 1; i <= N; i++){
                    p[i-1] = 1;
                }
            }else{
                for(i = k; i <= N; i=i+k){
                    if (p[i-1]){
                        p[i-1] = 0; 
                    }else{
                        p[i-1] = 1; 
                    }
                }
            }
        }
    
        for(int j = 1; j <= N; ++j){
            printf("%d", p[j-1]);
            if (j != N){
                printf(" ");
            }else{
                printf("
    ");
            }
        }
    
        free(p);
    
        return 0;
    }
    
    
  • 相关阅读:
    List集合
    ArrayList_toArray
    Collection集合基础知识
    Array类的使用
    16.10
    16.9
    16.8
    16.7
    16.6
    16.5
  • 原文地址:https://www.cnblogs.com/wreng/p/15200943.html
Copyright © 2020-2023  润新知