Java :: Aufgabe #158 :: Lösung #2

3 Lösungen Lösungen öffentlich
#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?
#2
vote_ok
von Timbo (50 Punkte) - 04.08.2017 um 13:33 Uhr
Quellcode ausblenden Java-Code
package trainYourProgrammer;

import java.util.Scanner;

/* Guess the code is really messy and not good programmed, but it will do it´s job*/


public class KaprekarKonstante
{
	
	static String d, d2, d3;
	static int dNew;
	static int temp = 0;

	public static void main(String[] args)
	{
		start();

	}
	
	public static void start()
	{
		Scanner scan = new Scanner(System.in);
		
		//Read digits
		System.out.println("Geben Sie eine 4-stellige Zahl ein. (Darf nicht vier mal die selbe Zahl beinhalten)");
		d = scan.next();
		scan.close();
		checkNum(d);
	}
	
	public static void checkNum(String num)
	{
		char[] temp = num.toCharArray();
		
		//Check if all 4 digits are the same
		if(temp[0] == temp[1] && temp[2] == temp[3] && temp[0] == temp[3] && d.length() != 4)
		{
			System.out.println("Gleichstellige Zahl oder zu viele Zahlen eingegeben. Eingabe ist ungültig.");
			start();
		}
		else
		{
			String d2 = sort(num.toCharArray(), false); //Decrement BubbleSort
			String d3 = sort(num.toCharArray(), true); //Increment BubbleSort
			calc(d2, d3);
		}
	}
	
	//Calculates dNew
	public static void calc(String a, String b)
	{
		dNew = Integer.parseInt(a) - Integer.parseInt(b);
		
		if(dNew != temp)
		{
			temp = dNew;
			System.out.println(Integer.toString(dNew));
			String tempo = Integer.toString(dNew);
			checkNum(tempo);
		}
		else if(dNew == temp)
		{
			System.out.println(dNew);
			System.exit(0);
		}
		
	}
	
	public static String sort(char[] num, boolean choose)
	{
		String result = "";
		
		if(choose) //Same as if(choose == true)
		{
			for(int i = 0; i < (num.length - 1); i++)
			{
				for(int d = 0; d < num.length - i - 1; d++)
				{
					if(num[d] > num[d+1])
					{
						char swap = num[d];
						num[d] = num[d+1];
						num[d+1] = swap;
					}
				}
			}
			result = new String(num);
		}
		else //boolean only got true or false --> Same as else if(choose == false)
		{
			for(int i = 0; i < (num.length - 1); i++)
			{
				for(int d = 0; d < num.length - i - 1; d++)
				{
					if(num[d] < num[d+1])
					{
						char swap = num[d];
						num[d] = num[d+1];
						num[d+1] = swap;
					}
				}
			}
			result = new String(num);
		}
		return result;
	}
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben