编写一个名为steps()的函数,该函数可为任何n个对象构建一个方形楼梯

时间:2019-04-26 16:15:23

标签: r

我是R的新手,正在尝试弄清楚如何解决此问题。 编写一个名为steps()的函数,该函数可为任何n建立一个方形楼梯。
enter image description here

这是我最初的目的

steps<- function(n)

{
  mx <- matrix(,nrow=n,ncol = n)

  for( n in 1:n)
  {
    mx[n,n] = "#"


  }

  print(mx)
}

2 个答案:

答案 0 :(得分:3)

steps <- function(n) {
  m <- matrix('', n, n)
  m[!upper.tri(m)[,n:1]] <- '#'
  m
}
steps(5)


#     [,1] [,2] [,3] [,4] [,5]
# [1,] ""   ""   ""   ""   "#" 
# [2,] ""   ""   ""   "#"  "#" 
# [3,] ""   ""   "#"  "#"  "#" 
# [4,] ""   "#"  "#"  "#"  "#" 
# [5,] "#"  "#"  "#"  "#"  "#" 

如果(不想像您的图片一样)您不想看到引号,那么

print(steps(5), quote = FALSE)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]                     #   
# [2,]                #    #   
# [3,]           #    #    #   
# [4,]      #    #    #    #   
# [5,] #    #    #    #    #  

答案 1 :(得分:-1)

OP解决方案的问题是for循环和索引不足。以下代码将在mx [1,1],mx [2,2],mx [3,3],...,mx [n,n]处索引。

  for(n in 1:n)
  {
    mx[n,n] = "#"
  }

使用第二个for循环可以使第一个for循环在行中遍历,而第二个遍历各列。使用以下类似内容将通过访问mx [1,1],mx [2,1],mx [2,2],...,mx [n,n]创建楼梯。

  for (i in 1:n)
    for (j in 1:i)
    {
      mx[i, j] = "#"
    }

将创建一个楼梯。

steps <- function(n)
{
  mx <- matrix('', nrow = n, ncol = n)

  for (i in 1:n)
    for (j in 1:i)
    {
      mx[i, j] = "#"
    }
  mx
}

print(steps(5), quote = FALSE)

我建议打印出变量i和j,以查看

之类的情况。
print(paste(i, j, sep = ' '))

所以您可以看到循环中发生了什么。