为什么我的" Fizz Buzz"在R工作中测试?

时间:2014-08-31 20:02:43

标签: r fizzbuzz

我听说这是一个常见的面试问题,任何想法都在这里,谢谢。

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))
        }
      }

3 个答案:

答案 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 中 FizzBu​​zz 的“优雅”是什么?

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)