開關燈,
描述
假設有N盞燈(N爲不大於5000的正整數),從1到N按順序依次編號,初始時全部處於開啓狀態;有M個人(M爲不大於N的正整數)也從1到M依次編號。
第一個人(1號)將燈全部關閉,第二個人(2號)將編號爲2的倍數的燈打開,第三個人(3號)將編號爲3的倍數的燈做相反處理(即,將打開的燈關閉,將關閉的燈打開)。依照編號遞增順序,以後的人都和3號一樣,將凡是自己編號倍數的燈做相反處理。
請問:當第M個人操作之後,哪幾盞燈是關閉的,按從小到大輸出其編號,其間用逗號間隔。
輸入輸入正整數N和M,以單個空格隔開。輸出順次輸出關閉的燈的編號,其間用逗號間隔。樣例輸入
10 10
樣例輸出
1,4,9
我認爲是有兩種寫法的
第一種,一個數組,然後只有0 ,1或者是true or false,0代表開燈,1代表關燈,
之後進去一個人改變燈的開關,就是0變1,1變0,
然後把 數組內是1的下標輸出來,
第二種就是,每個人進去一次然後下標就加1,然後是奇數的輸出下標
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[5000];
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
a[i]=0;
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
if(i%j==0){
a[i]+=1;
}
}
}
for(int i=1;i<=n;i++)
{
if(i==1)
{
cout<<1;
}
else if(a[i]%2==1)
cout<<","<<i;
else continue;
}
return 0;
}