d111 - 10110 - Light, more light
題目描述
題目描述了工友來回走廊開關燈泡的過程,要求判斷在走完 n 趟後,編號為 n 的燈泡是亮著還是暗著的。燈泡的狀態取決於被多少次開關控制。
解題思路
一個燈泡的狀態由其編號的因數個數決定。如果因數個數為奇數,則燈泡亮著;如果因數個數為偶數,則燈泡熄滅。完全平方數的因數個數為奇數,而非完全平方數的因數個數為偶數。因此,只需要判斷 n 是否為完全平方數即可。程式碼中直接計算了sqrt(a)並判斷是否相等。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
double a=0.0;
while(cin >> a){
if(a==0){
return 0;
}
int b=sqrt(a);
if(sqrt(a)==b){
cout << "yes" << endl;
}
else{
cout << "no" << endl;
}
}
}