百人拉百灯问题

百人拉百灯问题:
有100个房间,每个房间里有一盏灯,这些灯都是灭的,另外还有100个人
第一个人来到房间里:
如果房间编号能整除1,则拉一下灯
第二个人来到房间里:
如果房间编号能整除2,则拉一下灯

问:当100个人都拉完灯之后,哪些灯是亮的?
public class qst {
public static void main(String[] args) {
//从第1个数组开始使用
int[] room=new int[101];
//初始化数组0为关闭,1为开启
init(room);
//i代表人
for (int i = 1; i <= 100; i++) {
set(room,i);
}
//将开着的灯输出
on(room);
}
//初始化数组
public static void init(int room[])
{
for (int i = 1; i <=100; i++) {
room[i]=0;
}
}
//人进行拉灯操作
public static void set(int light[] ,int person)
{
for (int i = person; i <= 100; i++) {
if(i%person==0)
{
if(light[i]==0)
light[i]=1;
else
light[i]=0;
}
}
}
//将开着的灯进行输出
public static void on(int light[])
{
for (int i = 1; i <=100; i++) {
if(light[i]==1)
System.out.print(i+"\t");
}
}
}

第二种方式:
public class qst2 {
public static void main(String[] args) {
//定义一个 数组,装每个屋子里灯的状态:true:亮,false:灭
boolean[] 灯的状态=new boolean[100];//初始值为false
for (int 人编码 =1; 人编码 <= 100; 人编码++) {
for (int 房间编码 = 人编码; 房间编码 <=100; 房间编码++) {
if(房间编码%人编码==0)
灯的状态[房间编码-1]=!灯的状态[房间编码-1];
}
}
for (int x = 0; x < 灯的状态.length; x++) {
if(灯的状态[x])
{
System.out.print(x+1+"\t");
}
}
}
}

你可能感兴趣的:(百人拉百灯问题)