开灯问题

n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:nk,输出开着的灯编号。kn1000

 

 

#include<iostream>
#define MAX 1000
using namespace std;
int main()
{
    int i,j,n,k,m;
    int flag[MAX];
    cin>>n>>k;
        for(i=1;i<=n;i++)
            flag[i]=0;
        for(i=1;i<=k;i++)
            for(j=1;j<=n;j++)
                if(j%i==0)
                    flag[j]=(flag[j]+1)%2;            
        for(i=1;i<=n;i++)
        {
            if(flag[i]==1)
                cout<<i<<" ";
        }
        cout<<endl;
    return 0;
}

 

 

 

posted @ 2012-10-07 10:50  Afraid  阅读(108)  评论(0)    收藏  举报