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