C# :: Aufgabe #165 :: Lösung #4
4 Lösungen

#165
Existiert die Kaprekar-Konstante?
Anfänger - C#
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 golileo (20 Punkte)
- 04.05.2017 um 15:20 Uhr

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KapKon { class Program { static void Main(string[] args) { Console.WriteLine("Geben Sie eine vierstellige Zahl ein, welche nicht vier identische Stellen hat\n" + "Mit exit schließen Sie das Programm"); String d = Console.ReadLine(); int number; while((d.Length != 4 || !(int.TryParse(d, out number)) || (d.Distinct().Count() == 1))||d == "exit") { if (d == "exit") { System.Environment.Exit(1); } else { Console.WriteLine("Fehlerhafte Eingabe! Versuchen Sie es erneut\n\n"); d = Console.ReadLine(); } } String dnew = ""; dnew = doWork(d); while (dnew.CompareTo(d) != 0) { d = "" + dnew; dnew = doWork(dnew); //Console.WriteLine(check); } Console.WriteLine("Die Kaprekar-Zahl lautet {0}.", d); Console.ReadKey(); } public static String doWork(String _d) { String d1 = descOrder(_d); String d2 = ascOrder(_d); String _dnew = SubstractStrings(d2.PadLeft(4,'0'),d1.PadRight(4,'0')); Console.WriteLine(d1 + " - " + d2 + "="+_dnew); return _dnew; } public static String SubstractStrings(String _d1, String _d2) { String dnew = ""+((Int32.Parse(_d2)) -(Int32.Parse(_d1))); return dnew; } public static String descOrder(String _d) { Char[] splittedString = new Char[4]; splittedString = _d.ToCharArray(); if (_d.Distinct().Count() != 1) { Array.Sort<Char>(splittedString); Array.Reverse(splittedString); } String reverseD = new String(splittedString); return reverseD; } public static String ascOrder(String _d) { Char[] splittedString = new Char[4]; splittedString = _d.ToCharArray(); Array.Sort(splittedString); String ascD = new String(splittedString); return ascD; } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1