Все задачи
Средне Решено: 0 Процент решений: 0%

Найдите тройки прямоугольных треугольников

Перечислите все целочисленные прямоугольные треугольники с заданным периметром.

Найдите все тройки положительных целых чисел a < b < c, для которых a² + b² = c² и a + b + c = perimeter. Верните каждую тройку в виде [a, b, c], отсортированных по возрастанию a, затем b. Не включайте перестановки одних и тех же сторон.

Реализуйте функцию pythagorean_triplets(perimeter).

Ввод

perimeter: Требуемая сумма всех трёх сторон.

Вывод

Верните список троек в указанном порядке.

Ограничения

3 ≤ perimeter ≤ 100 000. Если ни один треугольник не подходит, верните пустой список.

Примеры

Пример 1
Ввод:
perimeter = 30

Ожидаемый вывод:
expected = [
    [5, 12, 13]
]
Ввод:
long long perimeter = 30;

Ожидаемый вывод:
std::vector<std::vector<long long>> expected = {
    {5, 12, 13}
};
Ввод:
long perimeter = 30;

Ожидаемый вывод:
long[][] expected = new long[][] {
    new long[] {5, 12, 13}
};

Пояснение

5 + 12 + 13 = 30 и 5² + 12² = 13². Это единственная подходящая тройка.

Пример 2
Ввод:
perimeter = 11

Ожидаемый вывод:
expected = []
Ввод:
long long perimeter = 11;

Ожидаемый вывод:
std::vector<std::vector<long long>> expected = {};
Ввод:
long perimeter = 11;

Ожидаемый вывод:
long[][] expected = new long[][] {};

Пояснение

Нет возрастающей тройки положительных целых чисел, образующих прямоугольный треугольник, сумма которых равна 11.

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.