题目描述
有N盏灯,开始时灯都是亮着的,每个灯都有一个开关控制着。现按其顺序编号为1,2,3,……N,然后将编号为2的倍数的灯拉一下,其次将编号为3的倍数的灯拉一下,再将编号为4的倍数的灯拉一下,最后将编号为5的倍数的灯拉一下,四次拉完之后,问亮着的灯的编号?
输入描述
文件中只有一个整数n(其中1≤n≤30)
输出描述
文件中有若干行,是亮着灯的编号。
样例输入
10
样例输出
1 4 6 7 8 10
方法思路
初始化状态:创建一个数组a来记录每盏灯的状态,初始时所有灯都是开启的(可以用false表示关闭,true表示开启)。
模拟操作过程:对于每个人i(从1到4),切换所有编号为i的倍数的灯的状态。
收集结果:遍历a数组,收集所有状态为打开的灯的编号。
输出结果:按要求格式输出结果。
解决代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin>>n;
vector<bool> a(n+1,true);
for(int i=2;i<=5;i++){
for(int j=i;j<=n;j++){
if(j%i==0){
a[j]=!a[j];//改变灯的状态
}
}
}
for(int i=1;i<=n;i++){
if(a[i]){
cout<<i<<" ";
}
}
return 0;
}
1932

被折叠的 条评论
为什么被折叠?



