日常-acm-开灯问题

  开灯问题。有n盏灯,编号1-n。第一个人把所有的灯打开,第二个人按下所有编号为二的倍数的开关(全关掉),第三个人按下所有编号为三的倍数的开关,以此类推。一共k个人,问最后开着的灯的编号。输入n和k,输出开着的灯的编号。k<n<1000。

  样例输入:

  7 3

  样例输出:

  1 5 6 7

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int i,j,n,k;
 8     cin>>n>>k;
 9     int sta[1001];
10     for(i=1; i<=n; i++)                 //先全部初始化
11         sta[i]=-1;
12     for(i=1; i<=k; i++)                 //有k个人
13     {
14         for(j=1; j<=n; j++)             //每个人都可以对所有的灯操作
15         {
16             if(j%i==0)
17             {
18                 sta[j]=-sta[j];         //操作时,状态反转
19             }
20         }
21     }
22     for(i=1; i<=n; i++)
23     {
24         if(sta[i]==1)
25             cout<<i<<" ";               //如果状态是1,也就是开灯,则输出序号
26     }
27     cout<<"\b";                         //此处强迫症福利
28     return 0;
29 }

 

posted @ 2017-12-05 16:56  一点都不萌  阅读(555)  评论(0编辑  收藏  举报