Input
n和k,1≤k≤n≤1000。
Output
输出开着的灯编号。
Sample Input
7 3
Sample Output
1 5 6 7
首先要解决的就是:灯的状态如何表示,方法是把每个灯的状态存入一个名为a的整型数组中,a[i]=0表示灯灭,a[i]=1表示灯亮。
如何改变灯的状态。每次进来一个人,就要把教室里的灯全部遍历一遍,如果是该同学编号的倍数,就按一次开关,否则,不改变其状态。很容易能够想到用条件语句来解决问题。
因为是每次进来以为同学都要对灯进行遍历,所以遍历的次数是由进来同学的人数所决定的。因为在循环中,同学人数在外层,灯的数目在内层。
在对灯泡状态进行改变时,有意很细节的问题就
1.首先要将灯泡全部设置为关闭状态,也即是说要给a数组中的全部成全赋值0,memset(a,0,sizeof(a));
2.然后再逐层灯进行修改的时候,要注意到,当a[10]=0,表示第11盏灯是关闭的。
3.在重复对第i盏灯修改状态时,a[i-1]=(a[i-1]+1)%2;
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define MAXN 1000+10
int a[MAXN];
int main(){
int i,j,x,n,k;
cin>>n>>k;
memset(a,0,sizeof(a));
for(j=1;j<=k;j++){
for(i=1;i<=n;i++){
if(i%j==0)a[i-1]=(a[i-1]+1)%2;
}
}
for(i=1;i<=n;i++){
if(a[i-1])cout<<i;
}
system("pause");
return 0;
}