Вы не указали, должна ли она быть случайной последовательностью, поэтому предположим, что это не требуется.
Один простой подход заключается в следующем:
1 + 2 + 47 = 50
3 + 4 + 43 = 50
5 + 6 + 39 = 50
7 + 8 + 35 = 50
9 + 10 + 31 = 50
11 + 12 + 27 = 50
Первые два числа2 наименьших доступных числа, третье число является окончательной суммой - эти числа.
a и b всегда увеличиваются, c всегда уменьшается
a + b всегда увеличивается, b + c иa + c всегда уменьшается
Вы можете сгенерировать его таким образом в цикле.
РЕДАКТИРОВАТЬ после комментария, что это должна быть случайная последовательность:
Возможно, вы могли бы создатьнесколько наборов (некоторый тип hashset / hashmap будет наиболее подходящим)
- набор первых слагаемых
- набор сумм первого и второго слагаемых
- наборсуммы второго и третьего слагаемых
- набор сумм первого и третьего слагаемых
- набор сгенерированных ранее троек
Вы могли бы генерировать случайные тройки следующим образом:
- Если общее количество требуемых трiples не был достигнут, генерирует случайную тройку, в противном случае завершается.
- Проверьте, не была ли ранее сформирована тройка, если нет, переходите к шагу 3.
- Проведите проверки для первых четырех наборов.Если в этих наборах нет сумм, добавьте тройку и перейдите к шагу 1.
Однако я не уверен, гарантирует ли этот подход, что вы получите результаты (особенно в небольших итоговых суммах).
Итак, я бы добавил счетчик, если слишком много последовательных попыток не увенчались успехом, то я бы переключился на метод грубой силы (что не должно быть проблемой, если конечные суммы невелики и, с другой стороны, вряд ли произойдутесли итоговая сумма велика).
В целом, производительность должна быть хорошей.