Python :: Aufgabe #145 :: Lösung #4

5 Lösungen Lösungen öffentlich
#145

Existiert die Kaprekar-Konstante?

Anfänger - Python von hollst - 23.02.2017 um 13:29 Uhr
Man weise numerisch nach, ob die Behauptung des indischen Mathematikers Kaprekar richtig ist.

Kaprekar hat folgendes behauptet (1949):

1.) Man nehme eine vierstellige Dezimalzahl D, wobei nicht alle vier Stellen identisch sein dürfen
(also 1111, 2222 etc. sind nicht erlaubt, aber z. B. 0001 ist erlaubt).
2.) D überführe man in zwei Zahle D1 und D2, indem bei D1 die Digits in absteigender und bei D2 in aufsteigender Reihenfolge
angeordnet werden (also z. B. D = 1724 -> D1 = 7421 und D2 = 1247; oder D = 1 -> D1 = 1000 und D2 = 1).
3.) Man subtrahiere nun D2 von D1; mit dem Ergebnis (Dneu = D1 - D2) wiederhole man Pkt. 2 durch Ersetzen von D durch Dneu solange,
bis sich nichts mehr ändert.

Die unglaubliche Behauptung ist, dass bei diesem Algorithmus stets das gleiche Ergebnis herauskommt (die sogenannte Kaprekar-Konstante),
egal, mit welchem D man beginnt.

Frage: Wie lautet die Kaprekar-Konstante?
#4
vote_ok
von Nachbar (2820 Punkte) - 20.03.2017 um 18:07 Uhr
Quellcode ausblenden Python-Code
# Python 2.7
# -*- coding: utf-8 -*-

eingabe = raw_input("4-stellige Zahl: ")
kaprekar = [0]

if eingabe[0] == eingabe[1] == eingabe[2] == eingabe[3]:
    exit()
elif len(eingabe) > 4 or len(eingabe) < 4:
    exit()

# Sortierung auf- und absteigend
def sort_absteigend(zahl, neue_zahl):
    while len(neue_zahl) < 4:
        maxzahl = max(zahl)
        neue_zahl = neue_zahl + maxzahl
        zahl = zahl.replace(maxzahl,"0", 1)
    return neue_zahl

def sort_aufsteigend(zahl, neue_zahl):
    while len(neue_zahl) < 4:
        minzahl = min(zahl)
        neue_zahl = neue_zahl + minzahl
        zahl = zahl.replace(minzahl,"9", 1)
    return neue_zahl

# Berechnung der Konstante
while True:
    x = int(sort_absteigend(eingabe, "")) - int(sort_aufsteigend(eingabe, ""))
    eingabe = str(x)
    if x not in kaprekar:
        del kaprekar[0]
        kaprekar.append(x)
    else:
        True = False

print "\nKaprekar-Konstante: ", kaprekar[0]

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2179961

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.