Zurück zu den Herausforderungen
Mittel 0 gelöst 0% Erfolgsquote

Finde rechtwinklige Dreiecks-Tripel

Liste alle ganzzahligen rechtwinkligen Dreiecke mit einem vorgegebenen Umfang auf.

Das lernst du

  • Alle ganzzahligen rechtwinkligen Dreiecke zu einem Umfang auflisten
  • Duplikate durch geordnete Seiten vermeiden
  • Die Suche mit Schranken beschneiden

Problem

Finde alle Tripel aus positiven ganzen Zahlen a < b < c, für die a² + b² = c² und a + b + c = perimeter gilt. Gib jedes Tripel als [a, b, c] zurück, sortiert nach aufsteigendem a und dann b. Permutationen derselben Seiten dürfen nicht enthalten sein.

Implementiere pythagorean_triplets(perimeter).

Eingabe

perimeter: Die geforderte Summe aller drei Seiten.

Ausgabe

Gib eine Liste der Tripel in der angegebenen Reihenfolge zurück.

Einschränkungen

3 ≤ perimeter ≤ 100.000. Gib eine leere Liste zurück, falls kein Dreieck die Bedingungen erfüllt.

Beispiele

Beispiel 1
Eingabe:
perimeter = 30

Erwartete Ausgabe:
expected = [
    [5, 12, 13]
]
Eingabe:
long long perimeter = 30;

Erwartete Ausgabe:
std::vector<std::vector<long long>> expected = {
    {5, 12, 13}
};
Eingabe:
long perimeter = 30;

Erwartete Ausgabe:
long[][] expected = new long[][] {
    new long[] {5, 12, 13}
};

Erläuterung

5 + 12 + 13 = 30 und 5² + 12² = 13². Dies ist das einzige passende Tripel.

Beispiel 2
Eingabe:
perimeter = 11

Erwartete Ausgabe:
expected = []
Eingabe:
long long perimeter = 11;

Erwartete Ausgabe:
std::vector<std::vector<long long>> expected = {};
Eingabe:
long perimeter = 11;

Erwartete Ausgabe:
long[][] expected = new long[][] {};

Erläuterung

Kein streng wachsendes Tripel aus positiven ganzen Zahlen mit rechtwinkligem Dreieck ergibt die Summe 11.

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

Ein gültiges Tripel muss sowohl die pythagoreische Gleichung als auch die Umfangssumme erfüllen.

Hinweis 2

Nutze den Umfang, um die Suche einzugrenzen, statt jede Anordnung der Seiten auszuprobieren.

Hinweis 3

Behalte nur a < b < c und überspringe Duplikate durch symmetrische Seitenwahl.

Erwartete Komplexität

Zeit O(n^2), zusätzlicher Speicher O(1)

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.