由于是服务员来n次,第i次打开是i的倍数的房间的灯,故我们可以设计两重循环,第一重表示的是第几次,第二重表示的是房间,如此得解。
#include<iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin>>n;
vector<bool> a(n+1,false); //false 关 true 开
for(int i=1;i<=n;i++) //i表示当前是i的倍数
for(int j=1;j<=n;j++) //j表示房间
if(j%i==0) a[j]=!a[j]; //每轮i不变j改变 所以j表示房间
for(int k=1;k<=n;k++)
if(a[k]) cout<<k<<" ";
return 0;
}