我听说这是一个常见的面试问题,任何想法都在这里,谢谢。
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))
}
}
答案 0 :(得分:4)
我将花括号放在不同的位置,你需要更正操作符 - %%
而不是%
。
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:~$
答案 1 :(得分:2)
我刚刚制作了R FizzBuzz check on myself:
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 dev采访中最好的解决方案。它可能被解释为缺乏使用R的矢量化功能的技能。
答案 2 :(得分:0)
你介意评价我的方法吗?你认为 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)