Просто для иллюстрации приведем два возможных решения проблемы.
Первый полностью императив , а второй более функциональный .
Идея состоит в том, что это служит примером, который поможет вам думать, как решать проблемы программным способом.
Как многие из нас уже прокомментировали, если вы не понимаете основных идей, лежащих в основе решения,тогда этот код будет бесполезен в долгосрочной перспективе.
Вот императивное решение, идея проста, нам нужно напечатать n
строк, каждая строка содержит n - i
начинается (где i
- номер строки, начинающийся с 0
) . Старты разделены пустым пробелом.
Наконец, перед печатью стартов нам понадобятся некоторые отступы. Из примеров входных данных видно, что отступ начинается с 0
и увеличивается на 1
для каждой строки.
def printReverseTriangle(n: Int): Unit = {
var i = 0
var padding = 0
while (i < n) {
var j = padding
while (j > 0) {
print(" ")
j -= 1
}
var k = n - i
while (k > 0) {
print("* ")
k -= 1
}
println()
i += 1
padding += 1
}
}
А вот и более функциональный подход.
Как видите, в этом случае нам не нужно ничего менять, все операторы высокого уровня делают это за нас. И нам нужно только сосредоточиться на описании решения.
def printReverseTriangle(size: Int): Unit = {
def makeReverseTriangle(size: Int): List[String] =
List.tabulate(size) { i =>
(" " * (size - i)) + ("* " * i)
}.reverse
println(makeReverseTriangle(size).mkString("\n"))
}