我听说这是一个常见的面试问题,任何想法都在这里,谢谢。
for(i in 1:100){
if(i%15==0){
print('fizzbuzz')
} else
if (i%3==0){
print("fizz")
} else
if (i%5==0) {
print("buzz")
} else
(print(i))
}
}
我会将花括号放在不同的位置,您需要更正运算符 -%%
而不是%
.
for(i in 1:100) {
if(i%%15==0){
print('fizzbuzz')
} else if (i%%3==0){
print("fizz")
} else if (i%%5==0) {
print("buzz")
} else {
print(i)
}
}
但基本想法是合理的:首先解决特殊的“fizzbuzz”案例,然后处理剩余的(独家)案例。
以下是前 16 个结果:
edd@max:~$ r /tmp/fizzbuzz.R | head -16
[1] 1
[1] 2
[1] "fizz"
[1] 4
[1] "buzz"
[1] "fizz"
[1] 7
[1] 8
[1] "fizz"
[1] "buzz"
[1] 11
[1] "fizz"
[1] 13
[1] 14
[1] "fizzbuzz"
[1] 16
edd@max:~$
我刚刚让R FizzBuzz 检查了自己:
f = seq(3,100,3)
b = seq(5,100,5)
fb = f[f %in% b]
f = f[!f %in% fb]
b = b[!b %in% fb]
x = as.character(1:100)
x[f] = "Fizz"
x[b] = "Buzz"
x[fb] = "FizzBuzz"
cat(x, sep = "\n")
如果您不了解此处的任何功能,则应阅读手册。
您的for
循环解决方案可能不是 R 开发人员面试中最好的。这可能被解释为缺乏使用 R 的矢量化功能的技能。
你介意评价我的方法吗?对于 R 中的 FizzBuzz,您认为什么是“优雅的”?
x <- c(1:100)
y <-ifelse(x/3 == round(x/3, digits=0) & x/5 == round(x/5, digits=0), "FizzBuzz",
ifelse(x/3 == round(x/3, digits=0), "Fizz",
ifelse(x/5 == round(x/5, digits=0), "Buzz",
x)))
print(y)