N盏灯的问题

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

程序如下:

 

#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
using namespace std;
int main()
{ int i,n,k,j;
    int sum=0;
    int Light[1000]={0};

 cout<<"请输入要操作的灯盏数N:"<<endl;
 cin>>n;

 for (i = 0; i < n; ++i) 
  Light[i] = 0; //初始化打开
    for (i = 1; i <= n; ++i) // N个人操作
 {   cout<<endl;
  cout<<"第"<<i<<"个人操作后剩下的灯亮着(编号)"<<endl;
  sum=0;
  int t=0;
        for (j = 1; j <= n; ++j) // 每个人操作N盏灯
  {
   if (0 == j%i) // 若灯编号可以除尽人编号,则进行操作
   {
             Light[j-1] = !(Light[j-1]);
   }
  }
        for(k=0;k<n;k++)
     {
      
      if(Light[k]!=0)
     { 
      
      cout<<k+1<<" ";
      t++;
     }

  if(t==10)
  {
   cout<<endl;
      t=0;
  }
     }
     
    //cout<<"第"<<i<<"个人操作后有第"<<k+1<<"盏灯亮着"<<endl;
   //sum=sum+1;
      //cout<<"第"<<i<<"个人操作后还有"<<sum<<"盏灯亮着"<<endl;

  
   
 }

cout<<endl;
 return 0;
}


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值