开灯问题。有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<<""; //此处强迫症福利 28 return 0; 29 }