分析:
在本题中,n轮游戏过后,哪些牢房的门是开着的,其实有规律可循。这需要用到一个结论:平方数的正约数(即正的因数)的个数一定是奇数,非平方数的正约数的个数一定是偶数(约数间一一对应)。在本题中,牢房序号为1~n,初始时都是关着的,序号为平方数的牢房的状态变反次数为奇数,从而轮游戏后,变为打开的状态;序号不为平方数的牢房的状态变反次数为偶数,从而轮游戏后,仍然为关闭的状态
因此,本题的答案其实就是1~n范围内的平方数的个数,即n的平方根
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t; cin >> t;
while(t--)
{
int n; cin >> n; //牢房的个数
int k = sqrt(n);
cout << k << endl;
}
return 0;
}