有一个灯泡问题,其中有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] 删除。
我来说两句