2

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

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

3 回答 3

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:~$ 
于 2014-08-31T20:18:41.027 回答
2

我刚刚让R FizzBu​​zz 检查了自己

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 的矢量化功能的技能。

于 2015-10-20T10:24:45.383 回答
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)
于 2021-02-04T08:22:37.697 回答