小学期 发表于 2015-8-29 16:58:57

关灯问题

开关电灯
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 65536kB
描述
N盏灯排成一排,从1到N依次编号。有N个人也同样编号。
第一个人将灯全部熄灭;
第2个人将对应2和2的倍数的灯打开;
第3个人将对应着3和3的倍数的灯做反向操作(如果原来是开,则关掉它,否则就打开它);
以后的人和3做同样的操作,即第i个人将对应着i和i的倍数的灯做反向操作。
输入
灯的总数N, 1<=N<=1000
输出
在第N个人操作后,顺序输出还亮着灯的编号。
样例输入
8
样例输出
2 3 5 6 7 8

迷雾少年 发表于 2015-8-29 16:58:58

不知对否
#include <iostream>
using namespace std;
int main(void)
{
        /* 0:关 1:开*/


        /* 接收输入灯的数量 */
        int numberOfLights = 0;
        cin>>numberOfLights;

        /* 动态分配内存 */
        int *pLights = new int();



        /* 一级循环 */
        int iFirstLoop = 0;
        int iSeconLoop = 0;

        /* 设置2倍数的灯全亮 */
                for(iFirstLoop=1;iFirstLoop < numberOfLights;iFirstLoop+=2)
                {
                               pLights =1;
                }



        /* 从3倍数灯开始 */
        for(iFirstLoop=2;iFirstLoop<numberOfLights;iFirstLoop++)
        {
                /* 二级循环 */
                for(iSeconLoop=iFirstLoop;iSeconLoop < numberOfLights;iSeconLoop = iSeconLoop + (iFirstLoop+1))
                {
                               pLights = !pLights;
                }
        }




        /* 输出结果 */
        int iLoop = 0;
    for(iLoop=0;iLoop<numberOfLights;iLoop++)
        {
                if(1==pLights)
                  cout<<iLoop+1<<endl;

        }
        /* 释放内存 */
        delete []pLights;


        return 0;
}

小学期 发表于 2015-8-29 19:43:28

迷雾少年 发表于 2015-8-29 18:27
不知对否

对了

阔怀 发表于 2015-9-13 16:09:30

厉害
页: [1]
查看完整版本: 关灯问题