Учитывая список натуральных чисел, найдите количество треугольников, которые мы можем сформировать так, чтобы их стороны были представлены тремя различными записями входного списка.
(Вдохновение исходит от ЧР .)
Детали
- Треугольник может быть сформирован, если все перестановки трех сторон длины удовлетворяют строгому неравенству треугольника(Это означает, что a + b> c , a + c> b и b + c> a должны быть выполнены).
- Три длины сторон должны появляться в разных позициях в списке, но не обязательно должны быть попарно разными.
- Порядок трех чисел в списке ввода не имеет значения. Если мы рассмотрим список
a
и три числаa[i], a[j], a[k]
(гдеi,j,k
они попарно различны), то(a[i],a[j],a[k]), (a[i],a[k],a[j]), (a[j], a[i], a[k])
и т. Д. Все они рассматриваются как один и тот же треугольник. - Предполагается, что входной список содержит не менее 3 записей.
- Можно предположить, что входной список отсортирован в порядке возрастания.
Примеры
Небольшая тестовая программа может быть найдена здесь на Попробуй онлайн!
Input, Output:
[1,2,3] 0
[1,1,1] 1
[1,1,1,1] 4
[1,2,3,4] 1
[3,4,5,7] 3
[1,42,69,666,1000000] 0
[12,23,34,45,56,67,78,89] 34
[1,2,3,4,5,6,7,8,9,10] 50
Для ввода [1,2,3,...,n-1,n]
это A002623 .
Для ввода [1,1,...,1]
(длина n
) это A000292 .
[1,1,1,1]
4 «разных» треугольника, все[1,1,1]
, используя любые три из 1? Но это не 24, потому что три 1 выбраны неупорядоченными, то есть это подмножество трех индексов, а не упорядоченный список?