Hintergrund
Die offizielle Währung der imaginären Nation Golfenistan ist das Foo , und es sind nur drei Arten von Münzen im Umlauf: 3 Foos, 7 Foos und 8 Foos. Man kann sehen, dass es nicht möglich ist, mit diesen Münzen bestimmte Beträge wie 4 Foos zu bezahlen. Trotzdem können alle ausreichend großen Mengen gebildet werden. Ihre Aufgabe ist es, den größten Betrag zu finden, der mit den Münzen nicht gebildet werden kann (in diesem Fall 5 Foos), der als Münzenproblem bekannt ist .
Eingang
Ihre Eingabe ist eine Liste positiver Ganzzahlen, die die Werte der im Umlauf befindlichen Münzen darstellen. Zwei Dinge sind dabei garantiert:L = [n1, n2, ..., nk]
- Die GCD der Elemente von
L
ist 1. L
enthält nicht die Nummer 1.
Es kann unsortiert sein und / oder Duplikate enthalten (denken Sie an Münzen in Sonderausgabe).
Ausgabe
Da der GCD von L
1 ist, kann jede ausreichend große ganze Zahl m
als eine nicht negative lineare Kombination ihrer Elemente ausgedrückt werden; Mit anderen Worten, wir haben
m = a1*n1 + a2*n2 + ... + ak*nk
für einige ganze Zahlen . Ihre Ausgabe ist die größte Ganzzahl, die in dieser Form nicht ausgedrückt werden kann . Als Hinweis ist bekannt, dass die Ausgabe immer kleiner ist als , wenn und sind die maximalen und minimalen Elemente von ( Referenz ).ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
Regeln
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig. Wenn in Ihrer Sprache hierfür eine Funktion integriert ist, können Sie diese möglicherweise nicht verwenden. Es gibt keine Anforderungen an die Zeit- oder Speichereffizienz, außer dass Sie in der Lage sein sollten, die Testfälle zu bewerten, bevor Sie Ihre Antwort veröffentlichen.
Nachdem ich diese Challenge gepostet hatte, wies Benutzer @vihan darauf hin, dass Stack Overflow ein genaues Duplikat hat . Basierend auf dieser Metadiskussion wird diese Herausforderung nicht als Duplikat gelöscht. Ich bitte jedoch darum, dass in allen Antworten, die auf den Antworten der SO-Version basieren, die Originale zitiert, der Community-Wiki-Status zugewiesen und diese gelöscht werden, wenn der ursprüngliche Autor ihre Antwort hier veröffentlichen möchte.
Testfälle
[3, 7, 8] -> 5
[25, 10, 16] -> 79
[11, 12, 13, 14, 13, 14] -> 43
[101, 10] -> 899
[101, 10, 899] -> 889
[101, 10, 11] -> 89
[30, 105, 70, 42] -> 383
[2, 51, 6] -> 49
(p - 1)(q - 1)
als Obergrenze festlegt , wo p
und wo q
das kleinste und größte Element der Menge ist.
[2,3]
in angemessener Zeit und sonst nichts tun kann . [2,5]
würde etwa eine Million Python-Listen im Speicher erstellen.
FrobeniusNumber
in Mathematica.