Java数组和循环

za

有一个灯泡问题,其中有100人执行一项任务。有人实施了代码来解决此问题:

 boolean[] bulbs = new boolean[100];

 for(int i = 1; i < bulbs.length; i++){//loops through people

我的问题是;这段代码难道不是只循环了99个人吗?

如果您对原始问题感兴趣,它会像这样:

一个长房间里有100个连续排成一排的灯泡。每个灯泡都有其自己的开关,并且目前已关闭。这个房间有进门和出门。入口门外排成一排,共有100人。每个灯泡从1到100连续编号。每个人也是如此。

1号人员进入房间,打开每个灯泡,然后退出。2号人员进入并每秒钟打开第二个灯泡上的开关(关闭灯泡2、4、6 ...)。3号人员进入并翻转每三个灯泡上的开关(更改灯泡3、6、9 ...的状态)。这一直持续到所有100个人都通过了房间为止。

64号灯泡的最终状态是什么?第100个人穿过房间后,有多少个灯泡点亮?

另外,如果您感兴趣,那么整个代码是:

    boolean[] bulbs = new boolean[100];

for(int i = 1; i < bulbs.length; i++){//loops through people
    for(int j = 0; j<bulbs.length;j+=i){//loops through bulbs
        bulbs[j] = !bulbs[j];
    }
}

//print out all the "on" bulbs
for(int i = 1; i<bulbs.length;i++){
    if(bulbs[i]){
        System.out.println(i + ": "+ bulbs[i]);
    }
}
反火焰

不,我不应该初始化为0,因为这意味着在下一条规则上:

for (int j=0; j<bulbs.length;j+=i)

j将无限期地保持为0。

我确实认为:

 for(int i = 1; i < bulbs.length; i++)

应该变成:

 for(int i = 1; i <= bulbs.length; i++)

因此它实际上是从1循环到100,而不是1-99。

至于最后一部分:64号灯泡的最终状态是什么?第100个人穿过房间后,有多少个灯泡点亮?

System.out.println("State bulb 64: " + bulbs[63]); // if we assume bulbs[0] is considered as bulb number 1
int count = 0; 
for (int i=0; i<bulbs.length; i++) {
    if (bulbs[i]) 
        count++;
}
System.out.println("# lightbulbs on:" + count);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章