一个关于C++的题目帮我讲讲怎么做啊谢谢了

来源:百度知道 编辑:UC知道 时间:2024/06/25 18:34:38
盏灯排成一排,从1到N按顺序依次编号。有N个人也从1到N依次编号。第1个人将灯全部关闭。第2个人将凡是2的倍数的灯都打开。第3个人将凡是3的倍数的灯全部做相反处理。以后的人都和3号一样将自己倍数的灯都做相反处理。 当N个人操作之后拿几个灯是亮的
就当有100个灯!~

struct lingt
{
bool shining;
};
lingt MyLight[100];
int _tmain(int argc, _TCHAR* argv[])
{

int n=0;
int c=0;
int count=0;
for(int i=0;i<100;i++)
{
if(i%2==0)
{
MyLight[i].shining=1;

c++;
}
else
{
MyLight[i].shining=0;
}

}
printf("请输入人数:");
scanf("%d",&n);
if(n==0)
{printf("请输入正整数!"); }
else if(n==1)
{
printf("亮着的灯是: 0");
}
else if(n==2)
{printf("亮着的灯:%d",c);}
else if(n>2)
{
for(int k=3;k<=n;k++)
{
for(int j=0;j<100;j++)
{
if(j%k==0)
{
MyLight[j].shining=!MyLight[j].shining;
}
}
}