Java :: Aufgabe #158 :: Lösung #3
3 Lösungen

#158
Existiert die Kaprekar-Konstante?
Anfänger - Java
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?
#3

von Bufkin (1410 Punkte)
- 20.09.2017 um 12:13 Uhr
intSort() ist möglicherweise etwas umständlich, aber es funktioniert
if it looks stupid, but works, it ain't stupid :D
Java-Code
if it looks stupid, but works, it ain't stupid :D

import java.util.*; class kaprekar { public static int intSort(int eingabe, boolean reverse) { Integer[] liste = new Integer[4]; int tausend = eingabe / 1000; eingabe = eingabe % 1000; int hundert = eingabe / 100; eingabe = eingabe % 100; int zehn = eingabe / 10; eingabe = eingabe % 10; int eins = eingabe; liste[0] = tausend; liste[1] = hundert; liste[2] = zehn; liste[3] = eins; ArrayList<Integer> intList = new ArrayList<Integer>(); for (Integer current : liste) { intList.add( current ); } if(reverse) { Comparator<Integer> comparator = Collections.reverseOrder(); Collections.sort(intList, comparator); } else { Collections.sort(intList); } int ausgabe = 0; int multiplikator = 1; for(int i = 3; i >= 0; i--) { ausgabe += intList.get(i) * multiplikator; multiplikator *= 10; } return ausgabe; } public static void berechnung(int d) { int tmp = d; int dneu = 0; int vorheriger = 0; while(true) { int d1 = intSort(d, true); int d2 = intSort(d, false); dneu = d1 - d2; d = dneu; if(vorheriger == d) { break; } else { vorheriger = d; } } System.out.println("Eingabe: " + tmp + "\tKaprekar-Konstante: " + d); } public static void main (String[] args) throws java.lang.Exception { berechnung(6214); berechnung(1263); berechnung(8734); berechnung(373); berechnung(1); berechnung(7235); } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1