華爲上機測試題(求亮燈數量-java)

PS:本身寫的,自測試OK,供你們參考。java

/*測試

一條長廊裏依次裝有n(1 ≤ n ≤ 65535)盞電燈,從頭至尾編號一、二、三、…n-一、n。每盞電燈由一個拉線開關控制。開始,電燈所有關着。
有n個學生從長廊穿過。第一個學生把號碼凡是1的倍數的電燈的開關拉一下;接着第二個學生把號碼凡是2的倍數的電燈的開關拉一下;接着第三個學生把號碼凡是3的倍數的電燈的開關拉一下;
如此繼續下去,最後第n個學生把號碼凡是n的倍數的電燈的開關拉一下。n個學生按此規定走完後,長廊裏電燈有幾盞亮着。
注:電燈數和學生數一致。spa

*/code

 1 import java.util.Scanner;
 2 
 3 public class Lamp {
 4     
 5     public static void main(String[] args) {
 6         System.out.println("請輸入長廊裏燈的數量:");
 7         Scanner s = new Scanner(System.in);
 8         int n = s.nextInt();
 9         s.close();
10         
11         if((n < 1) || (n > 65535))
12         {
13             System.out.println("輸入數值超出範圍!");
14         }
15         else
16         {
17             System.out.println("長廊裏有 "+getLampNum(n)+" 盞燈亮着");
18         }
19     }
20 
21     private static int getLampNum(int n) {
22         
23         int ret = 0;
24         boolean[] flag = new boolean[n];
25         //初始化電燈,所有關着
26         for(int i = 0; i < n; i++)
27         {
28             flag[i] = false;
29         }
30         
31         //拉燈操做,true爲亮,滅爲false
32         for(int i = 1; i <= n; i++)
33         {
34             for(int j = i; j <= n; j++)
35             {
36                 if(0 == j%i)
37                 {
38                     flag[j-1] = !flag[j-1];
39                 }
40             }
41         }
42         
43         //找出全部亮的燈
44         for(int i = 0; i < n; i++)
45         {
46             if(flag[i])
47             {
48                 ret++;
49             }
50         }
51         
52         return ret;
53     }
54 
55 }
相關文章
相關標籤/搜索