2016-04-28 67 views
-2

新的JavaScript程序员在这里。我试图找出一个实践问题,但不知道我的代码出错了。JavaScript 100门

问题:您连续有100扇门都是最初关闭的。你在门口做了100次传球。第一次通过时,您访问每扇门并切换门(如果门关闭,打开它;如果它打开,则关闭它)。第二次你只访问每个第二个门(门#2,#4,#6,...)。第三次,每3门(3号门,#6号,#9号门)等,直到你只访问第100门。

问题:最后一次通过之后门的状态是什么?哪些是封闭的?

编辑 对于这是不是一个功课问题......我想教自己的Javascript的记录,我发现从这里的问题是:http://rosettacode.org/wiki/100_doors

我的代码:

var doors = []; 
for (var i = 0; i < 100; i++) { 
    doors[i] = "Closed"; 
} 

for (var j = 1; j <= 100; j++) { // j is what you're dividing by 
    for (var k = 0; k < 100; k++) { //0 is the first door b/c of arrays 
    if (doors[k] % j === 0) { 
     toggle(k); 
    } 
    else {} 
    } 
} 

for (var counter = 0; counter < 100; counter++) { 
    console.log("Door " + (counter + 1) + " is " + doors[counter]); 
} 

function toggle(value) { 
    if (doors[value] === "Open") { 
    doors[value] = "Closed"; 
    } 
    else { 
    doors[value] = "Open"; 
    } 
} 
+0

你看到了什么问题? – RJM

+3

这听起来像一个家庭作业的问题... – Yatrix

+1

哈哈我不在学校;试图教自己的JavaScript。问题是,他们都报告关闭。 –

回答

1

doors[k] % j是无稽之谈("Closed" % 1)。

k % j == 0将始终为第0个门。使用(k + 1) % j触发第二,第五,第八(即英文中的#3,#6,#9)...当j3时。

虽然这不是一个错误,但如果您刚刚在数组中使用布尔值,它会更容易:例如,关闭时为false,打开时为true。然后切换只是doors[value] = !doors[value]。转换为输出字符串,因为"Closed""Open"只与人类有关。

+0

以秒为单位击败我:) – lerouche

+0

谢谢你的收获!我也得到为什么k%j不适用于0,但我不明白为什么我会使用(k + 1)%j。 –

+0

因为你想要每一扇干净地用*英语*中的'j'分隔的门;当它转换为computerese时,它会被忽略掉:#3实际上是'j == 2',#6实际上是'j == 5' ...所以当你给索引添加一个时,你会得到你想要的数字用'j'干净地划分)。例如。当'j == 3'和'j == 5'时,'(5 + 1)%3'为'0',切换你的门#6。 – Amadan