題目連結
題意:
有個工人在有 n 個燈泡的走廊巡邏
他總共會巡邏 n 次
已知燈泡編號 1 ~ n
第 i 次巡邏會將編號 i 倍數的所有燈泡按下
(若燈泡每次按下就是開、關切換)
假設一開始燈泡都是暗的
若巡邏完後,最後一個燈泡是亮的,輸出 yes
反之,輸出 no
舉例來說,假設 n = 4,一開始全暗
第 1 次巡邏,按下 1 2 3 4,此時全亮
第 2 次巡邏,按下 2 4,此時1 3亮
第 3 次巡邏,按下 3,此時1亮
第 4 次巡邏,按下 4,此時1 4亮
最終 4 是亮的,輸出yes
解法:
這題難在題意XD
看得懂就是水題了
題目只問編號 n 的燈泡,其他不用關心
以上述例子來說
會影響到 4 的就是 1 2 4,也就是 4 的因數
要使最後結果為亮,因數個數必為奇數
只有當 n 為完全平方數才符合(因數: 1, 平方根 & 自己)
所以理解後就是判斷 n 是否為平方根即可
以我的作法來說,我用 Math.sqrt( ) (求某數的平方根)
只有 n 為完全平方數時,回傳值才為整數
若否, % 1 後結果就不為 0
程式(Java):
題意:
有個工人在有 n 個燈泡的走廊巡邏
他總共會巡邏 n 次
已知燈泡編號 1 ~ n
第 i 次巡邏會將編號 i 倍數的所有燈泡按下
(若燈泡每次按下就是開、關切換)
假設一開始燈泡都是暗的
若巡邏完後,最後一個燈泡是亮的,輸出 yes
反之,輸出 no
舉例來說,假設 n = 4,一開始全暗
第 1 次巡邏,按下 1 2 3 4,此時全亮
第 2 次巡邏,按下 2 4,此時1 3亮
第 3 次巡邏,按下 3,此時1亮
第 4 次巡邏,按下 4,此時1 4亮
最終 4 是亮的,輸出yes
解法:
這題難在題意XD
看得懂就是水題了
題目只問編號 n 的燈泡,其他不用關心
以上述例子來說
會影響到 4 的就是 1 2 4,也就是 4 的因數
要使最後結果為亮,因數個數必為奇數
只有當 n 為完全平方數才符合(因數: 1, 平方根 & 自己)
所以理解後就是判斷 n 是否為平方根即可
以我的作法來說,我用 Math.sqrt( ) (求某數的平方根)
只有 n 為完全平方數時,回傳值才為整數
若否, % 1 後結果就不為 0
程式(Java):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.*; | |
public class Main { | |
public static void main(String args[]) { | |
Scanner sc = new Scanner(System.in); | |
while (sc.hasNext()) { | |
long n = sc.nextLong(); | |
if (n == 0) | |
break; | |
if (Math.sqrt(n) % 1 == 0.0) | |
System.out.println("yes"); | |
else | |
System.out.println("no"); | |
} | |
} | |
} |
留言
張貼留言