Прежде всего, посмотрите на ваш строительный проект по-другому:
- Вы должны начать с переборки.
- После этого каждая труба должна иметь переборкупосле него.
Таким образом, вам нужно построить дорожку длиной l-b
с трубами длиной m+b
и n+b
.
Перераспределить факторы, и вы 'Вы обнаружите, что у вас есть уравнение из двух переменных, а не 3:
(m+b)*s1 + (n+b)*s2 = l-b
Без ограничения общности предположим, что s2> s1.Ваша дорожка будет нуждаться как минимум (нижняя граница) в таком количестве сегментов трубы, достаточно длинного, чтобы достичь хотя бы необходимой длины дорожки.
ceil( (l-b) / (n+b) )
и не более (верхняя граница), чем
floor( (l-b) / (m+b) )
Вы можете перебрать итеративное решение:
- решить уравнение для s2
- итерировать
s1
в указанном выше диапазоне - для каждогозначение s1, посмотрите, является ли s2 целым числом.Если это так, запишите решение.
Это просто, но не элегантно.В действительности вы захотите использовать соответствующую работу по линейным диофантовым уравнениям для параметризации всех решений с s1, s2 >= 0
.