我正在尝试使用R解决测验,但我的代码无法正常工作。我试过调试,但似乎ifelse语句无法在某些看起来很随机的数字上工作。
以下是测验:http://puzzles.nigelcoldwell.co.uk/six.htm
switches <- rep("off", 100)
for(i in 1:100){
k <- c(seq(i, 100, i))
ifelse(switches[k] == "off", switches[k] <- "on", switches[k] <- "off")
}
当我运行这段代码时,我会在14,22,26,30,34等“开启”,其中我应该“关闭”。我将ifelse语句应用于具有矢量化索引的向量的方式是否存在错误?
答案 0 :(得分:1)
ifelse
语法应为
switches <- rep("off", 100)
for(i in 1:100){
k <- seq(i, 100, i)
switches[k] <- ifelse(switches[k] == "off", "on", "off")
}
答案 1 :(得分:1)
你有二进制问题。没有理由使用ifelse
。使用逻辑值:
bulbs <- rep(FALSE, 100)
for (i in 1:100) bulbs[!((1:100) %% i)] <- !bulbs[!((1:100) %% i)]
which(bulbs)
#[1] 1 4 9 16 25 36 49 64 81 100