谁能告诉我这题怎么做啊!~ 想了半天想不出来!~

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

建议:采用图形法,显示每一盏灯,并为每一盏灯加边框,用不同的颜色显示开灯或关灯。

例如:当输入N为7时;

当第一个人操作时

则输出结果为:
第1盏灯是黑的
第2盏灯是黑的
第3盏灯是黑的
第4盏灯是黑的
第5盏灯是黑的
第6盏灯是黑的
第7盏灯是黑的
当第二个人操作时
则输出结果为:
第1盏灯是黑的
第2盏灯是亮的
第3盏灯是黑的
第4盏灯是亮的
第5盏灯是黑的
第6盏灯是亮的
第7盏灯是黑的
当第三个人操作时
则输出结果为:
第1盏灯是黑的
第2盏灯是亮的
第3盏灯是亮的
第4盏灯是亮的
第5盏灯是黑的
第6盏灯是黑的
第7盏灯是黑的
… … …
当第七个人操作时
则输出结果为:
第1盏灯是黑的
第2盏灯是亮的
第3盏灯是亮的
第4盏灯是黑的
第5盏灯是亮的
第6盏灯是亮的
第7盏灯是亮 的

我的答案:

#include<iostream>
using namespace std;
int i;
struct light
{
int id; //灯号
int flag ; //标志
};

void main()
{
int n[11]; //人
light lighto[11]; //灯
for( i=1;i<11;i++)
{
lighto[i].id=i;
lighto[i].flag=1;
n[i]=i;
}
for(int k=1;k<11;k++)