开灯问题

开灯问题 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000 输入 输入一组数据:n和k 输出 输出开着的灯编号 样例输入 7 3 样例输出 1 5 6 7

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;


int main(int argc, char* argv[])
{
int b[1005],i,j,n,k;
memset(b,-1,sizeof(b));
cin>>n>>k;
for(i=1;i<=k;i++)
for(j=1;j*i<=n;j++)
b[i*j]=-b[i*j];
for(i=1;i<=n;i++)
if(b[i]==1)
cout<<i<<" ";
cout<<endl;
return 0;
}

posted on 2014-04-25 21:11  52Cyan  阅读(257)  评论(0编辑  收藏  举报

导航