Meine Aufgabe ist es, Kieselsteine in dreieckige Stapel zu stapeln. Ich mache das erst seit einem Jahrhundert und es ist schon ziemlich langweilig. Das Schlimmste ist, dass ich jeden Stapel beschrifte. Ich weiß, wie man Kieselsteine in Stapel maximaler Größe zerlegt , aber ich möchte die Anzahl der Stapel minimieren. Kannst du helfen?
Aufgabe
Zerlegen Sie eine gegebene Ganzzahl in die minimale Anzahl dreieckiger Zahlen und geben Sie diese minimale Anzahl aus.
Dreieckszahlen
Eine dreieckige Zahl ist eine Zahl, die n
für einen bestimmten Wert als Summe der ersten natürlichen Zahlen ausgedrückt werden kann n
. Somit sind die ersten paar Dreieckszahlen
1 3 6 10 15 21 28 36 45 55 66 78 91 105
Beispiel
Nehmen wir als Beispiel an, die Eingabe ist 9
. Es ist keine Dreieckszahl, daher kann es nicht als Summe der 1
Dreieckszahlen ausgedrückt werden . Somit ist die minimale Anzahl von Dreieckszahlen 2
, die mit erhalten werden kann [6,3]
, was die korrekte Ausgabe von ergibt 2
.
Nehmen wir als weiteres Beispiel an, die Eingabe ist 12
. Die naheliegendste Lösung besteht darin, einen gierigen Algorithmus zu verwenden und jeweils die größte Dreieckszahl zu entfernen, wobei sich [10,1,1]
eine Ausgabe von ergibt 3
. Es gibt jedoch eine bessere Lösung: [6,6]
die korrekte Ausgabe von 2
.
Testfälle
in out
1 1
2 2
3 1
4 2
5 3
6 1
7 2
8 3
9 2
10 1
11 2
12 2
13 2
14 3
15 1
16 2
17 3
18 2
19 3
20 2
100 2
101 2
5050 1
Regeln
- Die Eingabe-Ganzzahl liegt zwischen 1 und der maximalen Ganzzahl Ihrer Sprache.
- Ich kann mit meinen Kieselsteinen jede Sprache emulieren , und ich möchte, dass Ihr Code so klein wie möglich ist, da ich nur Kieselsteine habe, um den Überblick zu behalten. Das ist also Code-Golf , also gewinnt der kürzeste Code in jeder Sprache .
n = 12
).