zoukankan      html  css  js  c++  java
  • 【2042】模拟开关

    Time Limit: 1second
    Memory Limit: 20 MB

    问题描述
    有N盏灯排成一排,依次编号为1,2,3,4……N,各有一个开关。开始时,灯都是亮着的。现在还有N个人,第一个人走过来,依次把1和1的倍数的电灯开关都拉一下;第三个人走过来,依次把3和3的倍数的电灯开关都拉一下,第五个人走过来,依次把5和5的倍数的电灯开关都拉一下……(按奇数的规律),问最后哪些编号的灯是关着的?


    Input

    只有一行,包括1个整数N(5<=N<=200)

    Output

    只有一行,由若干个空格间隔的整数组成,表示关着的灯的编号(按自然数顺序),如果没有灯是关着的,就输出0。

    Sample Input

    10
    

    Sample Output

    1 2 4 8 9 (9后面还有一个空格,然后换行结束)
    

    【题解】

    模拟题,按照要求模拟一下就好。一层for循环循环n个人 第二层循环循环从当前人的序号开始到n,判断第二层循环j 是否为i 的倍数,是则改变j灯的状态。

    最后,不可能会没有灯是关的。毕竟1一定是开着的。

    【代码】

    #include <cstdio>
    
    const int maxn = 200;
    
    int n,a[maxn + 20];
    
    void input_data()
    {
        scanf("%d",&n);
        for (int i = 1;i <= n;i++)
            a[i] = 1;
    }
    
    void get_ans()
    {
        for (int i = 1;i <= n;i++) //循环第i个人
            if ( ( i % 2) == 1) //如果i是一个奇数
                {
                    for (int j = i;j <= n;j++) //如果j是i的倍数 就改变灯的状态。
                        if ( (j % i) == 0)
                            a[j] = 1-a[j];
                }
    }
    
    void output_ans()
    {
        for (int i = 1;i <= n;i++)
            if (a[i] == 0)
                printf("%d ",i);
        printf("
    ");
    }
    
    int main()
    {
        input_data();
        get_ans();
        output_ans();
        return 0;
    }
    


     

  • 相关阅读:
    学号 20172328 《程序设计与数据结构》第八周学习总结
    172328 结对编程练习_四则运算 第一周 阶段总结
    学号 20172328 《程序设计与数据结构》实验二报告
    20172328《程序设计与数据结构》第七周学习总结
    Educoder
    Educoder
    Educoder
    Educoder
    Educoder
    Educoder
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632463.html
Copyright © 2011-2022 走看看