【题目描述】
有n盏灯,编号为1到n。第1个人把所有灯打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着? 对于所有数据,满足1<=k<=n<=1000 【输入描述】 输入包括两个整数,中间用空格隔开,分别代表题目中的n和k 【输出描述】 输出一行,包括若干整数,最后一个人操作完成后,仍然开着的灯的编号管家婆一票一码100正确第6版,按从小到大的顺序输出,每个整数后面用一个空格隔开。 【样例输入】 6 3 【样例输出】 1 5 红姐论坛资料大全086期 6
#include <iostream> #include <vector> int main() { int n, k; std::cin >> n >> k; std::vector<bool> lights(n + 1, false); // 初始化所有灯为关闭状态 for (int person = 1; person <= k; ++person) { for (int i = 1; i <= n; ++i) { if (i % person == 0) { lights[i] = !lights[i]; // 反转灯的状态 } } } std::cout << "最后开着的灯的编号:"; for (int i = 1; i <= n; ++i) { if (lights[i]) { std::cout << i << " "; } } std::cout << std::endl; return 0; }
这个程序首先创建了一个布尔型向量 ,表示每盏灯的状态,初始时都是关闭状态新澳门彩开奖历史结果查询()。然后,程序依次模拟每个人的操作,根据题目描述,如果某盏灯被操作奇数次,则最终开着;如果被操作偶数次,则最终关闭。
最后,程序输出最终开着的灯的编号,按从小到大的顺序输出。