题:
有N个灯放在一排,从1到N依次顺序编号。有N个人,也从1到N顺序编号。1号将灯全部关闭,2号将凡是2的倍数的灯全部打开;3号将3的倍数的灯全部作相反操作(该灯如为打开,则将它关闭;如关闭,则将灯打开)。以后的人,都和3号操作一样,将凡是自己序号倍数的灯作相反操作。
编程实现:
第N个人操作后,按顺序输出灯的状态(1表示等打开,0表示灯关闭)。
输入:
N(1<=N<=2000000),灯的个数
输出:
灯的状态,用01序列表示,中间无空格
输入示例:
2
输出示例:
01
代码 如下:
import java.util.Scanner;
public class DengPao {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int[] arr = new int[n+1];
int k=1;
//1表示灯泡为开,初始状态所有灯泡都是开,第一个人操作之后全变为关
for(int i=1; i<=n; i++){
arr[i]=0;
}
//从第二个人开始循环
for(int i=2; i<=n; i++){
k = i;
while(k % i == 0 && k < n){//k表示当前数,判断k是否是i的倍数,且k<n
if(arr[k] == 0)
arr[k] = 1;
else
arr[k] = 0;
k++;
}
k = 1;
}
//输出灯泡状态
for(int i=1; i<=n; i++){
System.out.print(arr[i]);
}
s.close();
}
}