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

#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?
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

von Nachbar (2820 Punkte)
- 20.03.2017 um 18:07 Uhr

# 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
Seite 1 von 0
1