написать функцию steps (), которая строит квадратную лестницу для любого n - PullRequest
0 голосов
/ 26 апреля 2019

Я новичок в 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 ]

3 голосов
/ 26 апреля 2019
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,] #    #    #    #    #  
0 голосов
/ 26 апреля 2019

Проблема с решением 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 = ' '))

чтобы вы могли видеть, что происходит в циклах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...