开关问题,有n个灯,分别由n个开关控制,拨一下开关则可以改变灯的状态(开->关 关->开)。初始状态灯都是关着的,先把每个开关都拨一下,然后拨一下2的倍数的开关,接着3的倍数,直到n的倍数,问最后有多少灯是开着的。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int t, a[110], k;
memset(a, 0, sizeof(a));
cin>>t;
for(int i=1; i<=t; i++)
{
for(int j=1; i*j<=t; j++)
a[i*j]=!a[i*j];
}
k=0;
for(int i=1; i<=t; i++)
{
if(a[i]==1)
k++;
}
cout<<k<<endl;
}
return 0;
}