2016-11-29 2 views
-5

Auf Neuanordnung Ziffern in Nummer 1862 nächsthöhere Zahl ist 2168Weiter höchste Zahl

Auf Neuanordnung Ziffern in Nummer 22405 nächsthöhere Zahl 22450

ist Was für die Suche nach nächsthöhere Zahl ist ein Algorithmus?

+0

Was meinen Sie mit "nächsthöchste Zahl"? Meinst du die nächsthöchste von allen Zahlen, die man bekommen kann, wenn man die Dezimalziffern der ursprünglichen Zahl umordnet? Und meinen Sie mit "mathematischem Prozess" einen Algorithmus oder Code in einer Computersprache oder etwas anderes? Ich habe einen solchen Code in Object Pascal (Delphi) und würde es gerne in Python übersetzen, aber Sie müssen klarstellen, was Sie wollen. Sie müssen uns auch mitteilen, welche Arbeit Sie bis jetzt an diesem Problem geleistet haben und welchen Code Sie erstellt haben. Dies ist kein Hausaufgaben-Antwortdienst. –

+1

Mögliches Duplikat von [Algorithmus, um die nächst größere Permutation einer gegebenen Zeichenfolge zu finden] (http://stackoverflow.com/questions/1622532/algorithm-to-find-next-greater-permutation-of-a-iven-string) –

+0

das ist, was ['std :: next_permutation'] (http://stackoverflow.com/a/16680391/995714) ist –

Antwort

1

Hier ist eine Zusammenfassung eines Algorithmus, der das tut, was Sie wollen. Wenn Sie mehr Details, Code oder einen Beweis für die Richtigkeit des Algorithmus wünschen, zeigen Sie uns mehr von dem, was Sie bisher getan haben.

Als Beispiel verwenden wir 1862. Scanne die Ziffern dieser Zahl von der am weitesten rechts stehenden Ziffer nach links, bis du ein fortlaufendes Ziffernpaar gefunden hast, bei dem die linke Ziffer kleiner als die rechte Ziffer ist. In diesem Fall ist das die 18. Nennen wir diese linke Ziffer die "Pivot" -Position (1 hier). Sie werden nun die Ziffern in der Zahl, die mit diesem Drehpunkt beginnt, neu anordnen. Ersetzen Sie den Drehpunkt durch die nächst größere Ziffer, die sich rechts davon befindet (2 in diesem Fall). Setzen Sie danach alle Ziffern, die früher auf oder rechts vom Drehpunkt waren (in diesem Fall), aufsteigend (168 hier). Das Ergebnis ist Ihre Antwort 2168. In Ihrem anderen Beispiel 22405 scannen Sie zurück und stoppen Sie bei 05. Sie ersetzen die 0 durch die 5 und dann die anderen Ziffern, 0 in diesem Fall, danach in aufsteigender Reihenfolge. Also lassen Sie die 224 in Ruhe und enden mit 22450.

Wenn Sie in Ihrem Rückwärtsscan kein fortlaufendes Ziffernpaar finden, bei dem die linke Ziffer kleiner als die rechte Ziffer ist, dann gibt es keine größere Ziffer mit diesen Ziffern.

Es gibt einen Trick, um die Platzierung der Ziffern in aufsteigender Reihenfolge zu beschleunigen, aber das überlasse ich Ihnen.

Verwandte Themen