算法一之开关灯的问题

题目:      

有 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();
        }
    }
}

点赞