Problem M: Turn on and Turn off the lights
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 102 Solved: 32
[ Submit][ Status][ Web Board]
Description
有N盏灯
,编号为 1 ~ n .第一个人把所有灯打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关着的灯将被打开,开着的灯将被关闭),依次类推.一共有k个人,问最后还有哪些灯开着.
![](http://202.199.117.57/kindeditor/plugins/emoticons/images/112.gif)
Input
输入数据有多组,每组包含两个正整数 n 和 k (k <= n <= 1000), n 代表灯的个数, k 代表人的个数.
Output
输出最后开着的灯的编号.
Sample Input
7 3
Sample Output
1 5 6 7
#include<stdio.h>
#include<string.h>
int main()
{
int a[1111],i,n,k;
int b[1111],q,j;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(a,-1,sizeof(a));
for(j=2;j<=k;j++)
{
for(i=2;i<=n;i++)
{
if(i%j==0)
{
a[i]*=-1;
}
}
}
q=0;
for(i=1;i<=n;i++)
{
if(a[i]==-1)
{
b[q++]=i;
}
}
for(i=0;i<q;i++)
{
if(i==q-1)
{
printf("%d\n",b[i]);
}
else
{
printf("%d ",b[i]);
}
}
}
return 0;
}