Python :: Aufgabe #145 :: Lösung #5
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?
#5

von jigga (4260 Punkte)
- 23.03.2017 um 13:06 Uhr

def kaprekar(d): d1 = d2 = 0 while True: liste = [] for i in range(len(str(d))): liste.append(d[i]) if len(liste) == 3: liste.append('0') d1 = int(''.join(sorted(liste,reverse=True))) d2 = int(''.join(sorted(liste))) if (str(d1-d2) != (d)): d = str(d1-d2) else: print("Kaprekar-Konstante: ",d) break while True: d = input("Vierstellige Zahl eingeben: ") if len(d) != 4: print("Nur vierstellige Zahlen!\n") continue if d == "1111" or d == "2222" or d == "3333" or d == "4444" or d == "5555"\ or d == "6666" or d == "7777" or d == "8888" or d == "9999": print("Keine Schnapszahlen!\n") continue else: kaprekar(d) break
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1