/****************************************************************************************
题目链接:
http://acm.nyist.net/JudgeOnline/problem.php?pid=77
思 路:
首先是输入2个数据,然后定义一个数组,介于灯只有2种状态,
所以就定义成bool类型,然后初始化为0,代表灯起初全部是关闭状态。
接着是2个循环,外面的循环代表从编号为1的人开始,直到结束。
里面的循环代表从编号为1的灯进行操作,把符合要求的灯的状态改变为和原来相反的状态即可。
最后判断哪些灯是开的,将它的编号输出。
由于最后的输出中,除了第一个输出的前面没有空格,其它的结果前面都有空格,
所以就把第一个就单独考虑。
****************************************************************************************/
#include <iostream>
#include <malloc.h>
#include <string.h>
using namespace std;
int main(void)
{
int n,k;
while(cin>>n>>k)
{
bool *lamp = (bool *)malloc((n+2)*sizeof(bool));
memset(lamp,0,(n+2)*sizeof(lamp));
for(int i=1; i<=k; i++)//人数遍历
for(int j=1; j<=n; j++)//灯数遍历
if(j % i == 0)
* (lamp+j) = !*(lamp+j);
cout<<1;
for(int j=2; j<=n; j++)
if(*(lamp+j) == 1)
cout<<" "<<j;
cout<<endl;
}
return 0;
}
开灯问题(语言入门)
最新推荐文章于 2024-03-21 20:02:29 发布