题目描述:
有n盏灯,编号为1-n,第一个人把所有的灯打开,第二个人按下所有编号为2的倍数的灯(这些灯将会被关掉),第三个人按下所有编号为3的倍数的灯(其中关掉的灯将会被打开,打开的等将会被关掉),依次类推,一共有k个人,问最后又那些灯开着?(输入n和k,输出开着的灯的编号.k<=n<=1000).
样例输入:
7 3
样例输出:
1 5 6 7
代码:
#include<stdio.h>
#include<string.h>
#define maxn 1010
int a[maxn];
int main() {
int n, k, first=1;
int i,j;
memset(a, 0,sizeof(a));//把数组a清零
scanf("%d%d",&n,&k);
for(i=1; i<=k; i++) {
for(j=1; j<=n; j++) {
if(j%i==0)
a[j]=!a[j];//如果灯的编号%人的编号==0,则开的灯关了,关的灯开了
}
}
for(i=1; i<=n; i++) {
if(a[i]) {
if(first) {
first=0;
} else {
printf(" ");
}
printf("%d",i);
}
}
printf("\n");
return 0;
}