算法一之開關燈的問題

題目:      

有 N 個燈放在一排,從 1 到 N 依次順序編號。有 N 個人也從 1 到 N 依次編號。1 號將燈全部關閉, 2 將凡是 2 的倍數的燈打開; 3 號將凡是 3 的倍數的燈作相反處理(該燈如爲打開的, 則將它關閉;如關閉的,則將它打開)。以後的人都和 3 號一樣,將凡是自己編號倍數的燈作相反處理。

解法如下:

import java.util.Scanner;
public class Light {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int n,i=1,k,count=0;
        boolean arr[];
        while(cin.hasNext()){
            n = cin.nextInt();            //接收輸入的N個人
            arr= new boolean[n];
            for(i=1;i<=n;i++){
                arr[i-1]=true;
            }
            //第n個人進行操作
            for(i=1;i<=n;i++){
                //第k個燈
                for(k=1;k<=n;k++){
                    if(k%i==0){
                        arr[k-1]=!arr[k-1];
                    }
                }
            }
            System.out.println("下面是亮着的燈:");
            for(i=1;i<=n;i++){
                if(arr[i-1]){
                    System.out.print(i+" ");
                    count++;
                    if(count%4==0){
                        System.out.println();
                    }
                }
            }
    System.out.println();
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章