R语言 对FizzBuzz问题的不同实现方法

R语言 对FizzBuzz问题的不同实现方法

FizzBuzz是R语言中的一个著名问题。Fizz “指的是3的倍数的数字,”Buzz “指的是5的倍数的数字,而 “FizzBuzz “指的是同时是3和5的倍数的数字。

方法1:用经典方法实现FizzBuzz的方法

这是一种解决FizzBuzz问题的经典方法,我们首先对序列范围内存在的每个数字运行for循环。我们使用’:’操作符创建了一个序列。现在在for循环中,我们有if, else if , 和else条件语句。然后我们将使用数字的模数运算符(%%)检查可除性。

如果数字能被15整除,我们就输出’FizzBuzz’,否则如果我们检查一个数字是否能被3整除,如果数字能被3整除,我们就输出’Fizz’,进一步检查是否能被5整除,如果数字能被5整除,我们就输出’Buzz’。如果这些条件都不满足,则执行else条件语句,直接输出数字的原样。

for (number in 1:100) {
  if (number %% 15 == 0){
    cat('FizzBuzz\n')
  }
  else if (number %% 3 == 0){
    cat('Fizz\n')
  }
  else if (number %% 5 == 0){
    cat('Buzz\n')
  }
  else{
    cat(number)
    cat('\n')
  }
}

输出

1 2 Fizz  4 Buzz  Fizz  7 8 Fizz  Buzz  11 Fizz  13 14 Fizz  Buzz  16 17 Fizz  19 Buzz  Fizz  22 23 Fizz  Buzz  26 Fizz  28 29 Fizz  Buzz  31 32 Fizz  34 Buzz  Fizz  37 38 Fizz  Buzz  41 Fizz  43 44 Fizz  Buzz  46 47 Fizz  49 Buzz  Fizz  52 53 Fizz  Buzz  56 Fizz  58 59 Fizz  Buzz  61 62 Fizz  64 Buzz  Fizz  67 68 Fizz  Buzz  71 Fizz  73 74 Fizz  Buzz  76 77 Fizz  79 Buzz  Fizz  82 83 Fizz  Buzz  86 Fizz  88 89 Fizz  Buzz  91 92 Fizz  94 Buzz  Fizz  97 98 Fizz  Buzz

方法2:比经典方案更有效的循环方案

在这个解决方案中,我们试图减少条件语句的数量。在这里,我们使用paste0,因为我们想在没有分隔符的情况下进行连接。让我们假设数字是9,我们检查以下条件 “9%%3==0″。下面条件的输出将是True。所以if条件里面的语句将被执行。我们将所有元素连接起来,其中o是一个空字符串,和一个新的字符串 “Fizz”。然后我们将所有的元素存回o中,最后显示每个数字的结果。

for (number in 1:100) {
  o <- ''
  if(number%%3==0){
    o<-paste0(o,"Fizz")
  }
  if(number%%5==0){
    o<-paste0(o,"Buzz")
  }
  if(o==''){
    o<-number
  }
  cat(o)
  cat('\n')
}

输出

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz Buzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 Fizz Buzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 Fizz Buzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 Fizz Buzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 Fizz Buzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 Fizz Buzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz 

方法3:使用函数实现FizzBuzz的方案

在这个方案中,我们试图消除它们的for循环,而利用了一个函数sapply()。sapply()函数接受一个向量作为输入,并返回函数对我们作为输入的序列的结果。然后,我们有一个函数的代码,其功能与解决方案2中解释的非常相似。

fizz_buzz <- function(number){
  o <- ''
  if(number%%3==0){
    o<-paste0(o,"Fizz")
  }
  if(number%%5==0){
    o<-paste0(o,"Buzz")
  }
  if(o==''){
    o<-number
  }
  cat(o)
  cat('\n')
}
fb<-sapply(1:100, fizz_buzz)[0]

输出

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz Buzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 Fizz Buzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 Fizz Buzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 Fizz Buzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 Fizz Buzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 Fizz Buzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz 

方法4:使用包 “fizzbuzzR “实现FizzBuzz

这里我们利用’fizzbuzzR’包中的一个函数即’fizzbuzz’。它需要以下参数。

  • start: 这是该循环的起始值
  • end: 循环将在这个值结束
  • mod1: 如果我们指定mod1为3,我们就表示我们将用’Fizz’替换所有3的除数。
  • mod2: 如果我们指定mod2为5,那么我们将用’Buzz’替换所有5的除数。
install.packages("fizzbuzzR")
library(fizzbuzzR)
fizzbuzz(start = 1, end = 100, mod1 = 3, mod2 = 5)

输出

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz Buzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 Fizz Buzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 Fizz Buzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 Fizz Buzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 Fizz Buzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 Fizz Buzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程