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
