Description
有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依次类推,一共有k个人,问最后有哪些灯开着。
输入两个整数 n 和 k ;1<=n<=1000;1<=k<=n;
输出所有开着灯的编号
Input
本题有多组测试数据,对于每组测试数据输入两个正整数,灯数 n 和人数 k ,以空格分隔;1<=n<=1000;1<=k<=n;
Output
对于每组测试数据,从小到大依次输出仍然亮着的灯号,灯号之间以一个空格分隔,每行首尾不得有多余空格
Sample Input
7 3
10 5
20 20
25 30
Sample Output
1 5 6 7
1 4 6 7 8 10
1 4 9 16
1 4 9 16 25
#include<stdio.h>
#include<string.h>
int main()
{
int n,k;
int a[1001]={0};
#ifdef LL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
// memset(a,1,sizeof(a));
while (scanf("%d %d",&n,&k)!=EOF)
{
for (int i=1;i<=k;i++)
{
for (int j=1;j<=n;j++)
{
if (j%i==0)
{
a[j]=1-a[j];
}
}
}
for (int i=1;i<=n;i++)
{
if (a[i]==1)
{
i==1?printf("%d",i):printf(" %d",i);
}
}
printf("\n");
memset(a,0,sizeof(a));
}
return 0;
}

6248

被折叠的 条评论
为什么被折叠?



