C/C++经典问题,如何求解

来源:百度知道 编辑:UC知道 时间:2024/05/20 18:34:15
实验一.指示灯控制显示
问题描述:
N盏灯排成一排,从1到N按顺序依次编号。有N个人也从1到N依次编号。第一个人(1号)将灯全部关闭。第二个人(2号)将凡是2和2的倍数的灯打开。第三个人(3号)将凡是3和3的倍数的灯做相反的处理(如果该灯为打开的,则将它关闭;如果该灯为关闭的,则将它打开)。以后的人都和3号一样,将凡是与自己编号相同的灯,以及是自己编号倍数的灯做相反处理。请编写程序实现。要求:程序中要显示每一个人所做工作的过程,例如:当第i个人操作时,则显示将i和i的倍数的灯做相反的处理过程;当第N个人操作之后,显示灯的最后状态。(建议:采用图形法,显示每一盏灯,并为每一盏灯加边框,用不同的颜色显示开灯或关灯)。

例如:当输入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盏

呵呵,差不多安你说的做了啊...不行你在改改,基本就这样吧(哎呀,忘记图形了....图形不会啊..不好意思)

#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++)
{
cout<<"第"<<k<<"个人操作时 :" <<endl;
for( i=1;i<11;i++)
{
if((lighto[i].id)%n[k]==0)
lighto[i].flag=!lighto[i].flag;
if(lighto[i].flag)
cout<<"第 "<<i<<" 盏灯是亮的"<<endl;
else
cout<<"第 "<<i<<" 盏灯是黑的"<<endl;
}
cout<<endl<<endl<<endl;
}
}

图形法自己解决吧,程序的核心就在这而了