Python :: Aufgabe #145 :: Lösung #6
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?
#6
von satn1241 (3090 Punkte)
- 03.04.2020 um 13:22 Uhr
#Kaprekar
#Eingabe und Überprüfung
zahl_eingabe = int(input("Gib bitte eine 4-stellige Zahl ein. Die Ziffern dürfen nicht gleich sein:" ))
while 0 > zahl_eingabe or zahl_eingabe%1111 == 0 or zahl_eingabe >=10000:
zahl_eingabe = int(input("Die Zahl entsprach nicht den Vorgaben, bitte wiederholen"))
#Ausführung
def kaprekar(zahl):
zahl = str(zahl).zfill(4)
#print(zahl)
ziffern = []
for zif in zahl:
ziffern.append(zif)
ziffern.sort()
zahl1 = ""
zahl2 = ""
for i in range(0,4):
zahl2 = ziffern[i] + zahl2
zahl1 = zahl1 + ziffern[i]
neue_zahl = (int(zahl2)-int(zahl1))
return(neue_zahl)
zahl = kaprekar(zahl_eingabe)
print(zahl)
# Schleife bis zur Konstanten
while True:
if zahl == kaprekar(zahl):
break
print(kaprekar(zahl))
zahl = kaprekar(zahl)Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
