文章目录
一、A1602 结果填空:开关灯
总结
一、A1602 结果填空:开关灯
本题链接:A1602 结果填空:开关灯
题目:
蒜头君今天回到了老家的大宅院,老家的灯还是那中拉线的灯(拉一次为亮,再拉一次就灭),蒜头君觉得无聊。把 1000盏灯 3 的倍数拉了一次,5 的倍数拉了一次,7的倍数拉了一次(灯得的编号从 1-1000,灯的初始状态都是亮的)。这个时候蒜头君在想还剩下几盏灯还在亮着?
提示:请不要输出多余的符号。
本博客给出本题截图:
分析
#include <iostream> using namespace std; const int N = 1010; bool s[N]; int res; int main() { for (int i = 1; i <= 1000; i ++ ) { if (i % 3 == 0) s[i] ^= 1; //异或操作写成s[i] = !s[i];也可 if (i % 5 == 0) s[i] ^= 1; if (i % 7 == 0) s[i] ^= 1; } for (int i = 1; i <= 1000; i ++ ) if (s[i] == 0) res ++; cout << res; return 0; }
AC代码
#include <iostream> using namespace std; int main() { cout << "571" << endl; return 0; }
总结
注意不能写成
for (int i = 1; i <= 1000; i ++ ) if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0) s[i] ^= 1;
因为这个操作当是3和5的倍数的时候只执行一次操作,实际应该执行两次操作