import java.util.Scanner;
/*
有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从
1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯
打开;3 号将凡是 3 的倍数的灯作相反处理(该灯如为打开 的,
则将它关闭;如关闭的,则将它打开)。以后的人都和 3 号一样,
将凡是自己编号倍数 的灯作相反处理。试计算第 N 个操作后,
哪几盏灯是点亮的。(0-表示灯打开 1-表示灯关闭)
*/
class 灯的开关状态 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入灯的个数,且人的个数与其相同:");
int n = sc.nextInt();
int[] arr =new int[n+1];//从下标1开始装的数据
int count=0;
for(int i=1;i<=n;i++){
if(i==1)//第一个人
for(int j=1;j<=n;j++)
arr[j]=0;
else if(i==2)//第二个人
for(int j=1;j<=n;j++){
if(j*i<=n)
arr[j*i]=1;
}
else if(i==3)//第三个人
for(int j=1;j<=n;j++){
if(j*i<=n){
if(arr[j*i]==1)
arr[j*i]=0;
else
arr[j*i]=1;
}
}
else//之后的人
for(int j=1;j<=n;j++){
if(i*j<=n){
if(arr[i*j]==1)
arr[i*j]=0;
else
arr[i*j]=1;
}
}
}
for(int i=1;i<=n;i++)
if(arr[i]==1)
count++;
System.out.println("\n"+"共有"+count+"盏灯亮着!"+"\n");
for(int i=1;i<=n;i++)
System.out.print(arr[i]);
System.out.println();
sc.close();
}
}
灯的开关状态 :有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯 打开;3 号将凡是 3 的倍数的灯作相
于 2020-08-19 20:55:20 首次发布