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