关灯问题
开关电灯查看 提交 统计 提问
总时间限制: 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 不知对否
#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 18:27
不知对否
对了 厉害
页:
[1]