开灯问题
Posted go-alltheway
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开灯问题相关的知识,希望对你有一定的参考价值。
有n盏灯,编号为1-n,第一个人把所有灯打开,第二个人按下所有编号两倍的开关(这些灯被关掉),第三个人按下所有编号三倍的开关,以此类推,一共有k个人,问最后有哪些灯开着?
输入:n和k,输出开着的灯的编号,k<=n<=1000
样例输入:
7 3
样例输出:
1 5 6 7
代码如下
#include<iostream>
using namespace std;
int main()
{
int n; // n 盏灯
int k; // k 个人
const int key = 1; // 设置开关
int light[1005]; // 用于存放每盏灯的数组
while (cin>>n>>k)
{
int j = 0;
for (int i = 1; i <= n; i++) //把每盏灯存入数组
light[i - 1] = i;
for (int i=2; i <= k; i++)
for (int j = 0; j < n; j++)
if (light[j] % i == 0) //如果灯的序号 是 人序号的倍数,则按动开关
light[j] = -key * light[j]; // 关灯为负号, 开灯为正号
for (int i = 0; i < n; i++)
if (light[i] > 0) //如果 为正,说明灯开着,则输出
{
cout<<light[i];
cout<<" ";
}
cout<<endl;
}
return 0;
}
以上是关于开灯问题的主要内容,如果未能解决你的问题,请参考以下文章