题目链接:http://poj.org/problem?id=1218
题解:
本题属于开关门问题,初始化门都是关着的,改变状态为:开变关、关变开(注意编号从1到n)
第1次:全部改变状态
第2次:编号为2的倍数的门改变状态
第3次:编号为3的倍数的门改变状态
……
第n次:编号为n的倍数的门改变状态
结束后,问有多少扇门是开着的
AC代码:
#include<iostream>
using namespace std;
int main() {
int n, m, ans;
cin >> n;
while (n--) {
cin >> m;
bool *p = new bool[m];
for (int i = 0; i < m; i++)
p[i] = false;//初始化最开始的状态
for (int i = 1; i <= m; i++)
for (int j = 1; j <= m; j++)
if (j%i == 0)
p[j - 1] = !p[j - 1];
ans = 0;
for (int i = 1; i <= m; i++)
if (p[i - 1]) ans++;
cout << ans << endl;
}
return 0;
}