时间限制:1秒 内存限制:128M
假设有N扇门(N<=5000),将这些门按照其顺序从1开始进行编号,初始状态下全部的门都是开着的;这X个人也从1开始进行依次编号。 第1个人会把这些门都关上,第2个人会将编号为2的倍数的门打开,从第3个人开始,依次将这个人所对应编号倍数的门做相反的处理(打开的关上,关上的再打开)。 请问:X个人操作完毕之后,有哪些门是关上的,从小到大输出编号,其间用逗号隔开。
输入两个数N和X,中间用空格隔开。
依次输出关闭的门的编号,其间用逗号隔开。
10 10
1,4,9
#include<bits/stdc++.h>
using namespace std;
int d[5000];
void door(int people,int much){
if(people==1){
for(int i=1;i<=much;i++){
d[i]=0;
}
return;
}
for(int i=1;i<=much;i++){
if(i%people==0){
!d[i];
}
}
return;
}
int main(){
int N,X,t=0;
cin>>N>>X;
for(int i=1;i<=N;i++){
d[i]=1;
}
for(int i=1;i<=X;i++){
door(i,N);
}
for(int i=1;i<=N;i++){
if(d[i]==0){
if(t==0){
cout<<i;
t++;
}else{
cout<<","<<i;
}
}
}
return 0;
}
请问什么情况