算法入门开灯问题,新做法

来源:互联网 发布:娶俄罗斯女人知乎 编辑:程序博客网 时间:2024/05/14 06:54
 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯被打开,       开着灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?

    输入:n和k,输出开着的灯编号。k≤n≤1000。

   样例输入:7  3

   样例输出:1 5 6 7 

#include <iostream>
using namespace std;
int main()
{
 int a[1001],i,j,n,k;
 while(cin>>n>>k)
 {
  for(i=1;i<=n;i++)
   a[i]=1;
  for(j=2;j<=k;j++)
   for(i=2;i<=n;i++)
   {
    if(i%j==0)
     a[i]=a[i]*(-1);
   }
   for(i=1;i<n;i++)
   {
    if(a[i]==1)
     cout<<i<<" ";
   }
   if(a[n]==1)
    cout<<n<<endl;
 }
 return 0;
}

 

 

 

0 0
原创粉丝点击