/**************************************************************************************** 题目链接: 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; }
原文:http://blog.csdn.net/li_jun_09_05/article/details/23882629