Ein Reisender muss n Tage in einem Hotel außerhalb der Stadt bleiben . Er hat kein Geld mehr und seine Kreditkarte ist abgelaufen. Aber er hat eine goldene Kette mit n Gliedern.
Die Regel in diesem Hotel ist, dass die Bewohner ihre Miete jeden Morgen bezahlen sollten. Der Reisende vereinbart mit dem Manager, dass er für jeden Tag ein Glied der goldenen Kette zahlt. Der Manager fordert aber auch, dass der Reisende die Kette so wenig wie möglich beschädigt, während er jeden Tag zahlt. Mit anderen Worten, er muss eine Lösung finden, um so wenig Glieder wie möglich zu schneiden.
Durch das Ausschneiden einer Verknüpfung werden drei Unterketten erstellt: eine, die nur die ausgeschnittene Verknüpfung enthält, und eine auf jeder Seite. Wenn Sie beispielsweise das dritte Glied einer Kette mit der Länge 8 abschneiden, werden Unterketten mit der Länge [2, 1, 5] erstellt. Der Manager nimmt gerne Änderungen vor, sodass der Reisende den ersten Tag mit der Kette der Länge 1 und den zweiten Tag mit der Kette der Länge 2 bezahlen und die erste Kette zurückerhalten kann.
Ihr Code sollte die Länge n eingeben und eine Liste der zu schneidenden Links mit minimaler Länge ausgeben.
Regeln :
- n ist eine ganze Zahl> 0.
- Sie können für die Links entweder eine 0-basierte oder eine 1-basierte Indizierung verwenden.
- Für einige Zahlen ist die Lösung nicht eindeutig. Zum Beispiel, wenn
n = 15
beide[3, 8]
und[4, 8]
gültige Ausgaben sind. - Sie können die Liste entweder zurückgeben oder mit einem geeigneten Trennzeichen drucken.
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Testfälle :
Input Output (1-indexed)
1 []
3 [1]
7 [3]
15 [3, 8]
149 [6, 17, 38, 79]
Ausführliches Beispiel
Für n = 15 führt das Schneiden der Glieder 3 und 8 zu Unterketten mit einer Länge [2, 1, 4, 1, 7]
. Dies ist eine gültige Lösung, weil:
1 = 1
2 = 2
3 = 1+2
4 = 4
5 = 1+4
6 = 2+4
7 = 7
8 = 1+7
9 = 2+7
10 = 1+2+7
11 = 4+7
12 = 1+4+7
13 = 2+4+7
14 = 1+2+4+7
15 = 1+1+2+4+7
Es gibt keine Lösung mit nur einem Schnitt, daher ist dies eine optimale Lösung.
Nachtrag
Beachten Sie, dass dieses Problem mit der Partitionierung ganzer Zahlen zusammenhängt. Wir suchen nach einer Partition P von n, so dass alle ganzen Zahlen von 1 bis n mindestens eine Partition haben, die eine Teilmenge von P ist .
Hier ist ein YouTube-Video zu einem möglichen Algorithmus für dieses Problem.
1+2
. Woher kommt die zweite 2-Gliederkette?