Помогите доработать код реализации алгоритма
Цель кода: вывести на экран уравнение, котрое приведет к заданому решению (см. input)
Проблема: я не пойму как реализовать, что бы последний знак '+' не добавлялся к выводу.
import Foundation
func mathNumbers(input: Int) -> Array<Int> {
var arr: Array<Int> = []
var i = input
while i > 0 {
let val = Int.random(in: 1...i)
i -= val
arr.append(val)
}
return arr
}
func numbersToStr(arr: Array<Int>) -> String {
var str = ""
for val in arr {
str += "\(val) + "
}
str += "0"
return str
}
let input = 123456789
print(numbersToStr(arr: mathNumbers(input: input)), terminator: "")
Ответы (2 шт):
Автор решения: kotleni
→ Ссылка
Возможно так:
// ...
func numbersToStr(input: Int, arr: Array<Int>) -> String {
var str = ""
var test = input // храним значение для проверки
for val in arr {
test -= val // отнимаем от значения val
str += "\(val) "
if test > 0 { str += " + " } // добавляем плюс только если не край
}
return str
}
let input = 123456789
print(numbersToStr(input: input, arr: mathNumbers(input: input)), terminator: "")
// ...
Автор решения: Roman
→ Ссылка
Цикл вообще не нужен - у массива есть прекрасный метод joined()
let str = arr.joined(separator: " + ")