# Größter Abstand von 2 Zahlen aus 3 Zahlen ausgeben mit Restriktionen, schwer?



## bulldozer (20. Okt 2012)

Hallo zusammen,

ich sitze seit ein paar Stunden an einer Aufgabe, wo ich mir den Kopf über ein Negativitätsproblem zerbreche. 
Als erstes einmal die Aufgabe:
Es sollen 2 Zahlen aus drei beliebigen Zahlen von -10.000 bis 10.000 mit dem größtem Abstand zueinander ausgegeben werden. Die erste Restriktionen ist es mit maximal 3 Vergleichsoperationen (<, >, <=, usw...) und möglichst wenigen Fallunterscheidungen (If-Bedingung) auszukommen. Es darf keine Funnktion aus der Mathe-Bibliothek genommen werden, dafür aber so viele arithmetische Operationen durchgeführt werden, wie man möchte.

Mein Code bisher:

```
public static void main(String[] args) 
    {		
		int a = -50;
		int b = -20;
		int c = 10;
		
		if(a - b > a-c && a - b > b -c)
		{
			System.out.println("Abstand zu a= " + a + " und b= " + b + " am größten.");
		}
		else if(a - c > b -c)
		{
			System.out.println("Abstand zu a= " + a + " und c= " + c + " am größten.");
		}
		else
		{
			System.out.println("Abstand zu b= " + b + " und c= " + c + " am größten.");
		}

	}
```

Der Code funktioniert nur, solange sich die Zahlen im positiven Bereich bewegen. Ist eine Zahl negativ, funktioniert der Code bisher nicht. Die Lösung wäre einfach, wären da nicht die gegebenen Restriktionen. Ansonsten würde ich entweder Math.Abs() nutzen oder mir die Betragsfunktion eben selbst schnell programmieren. Dafür würde man allerdings wieder einen Vergleichsoperator benötigen (x < 0). Meine eigentliche, ich nenne es mal Muttersprache, ist C# und da hätte ich dies aufgabe mit unsigned integers gelöst. Die bietet Java aber leider nicht und versuche es irgendwie mit dem Datentyp char hinzubekommen sind gescheitert.

Hat jemand eventuell einen Tipp, der mich in die richtige Richtung schießt? Es muss eigentlich etwas mit den arithmetischen Operationen zu tun haben... aber ich komme da auf keinen Lösungsansatz.

Vielen Dank schonmal für das Reindenken in diese Kopfnuss-Aufgabe!

Gruß,

bully


----------



## Fant (20. Okt 2012)

Pack einfach alle Zahlen in eine Liste. Dann gehst du einmal komplett durch die Liste und suchst dabei gleichzeitig sowohl das größte als auch das kleinste Listenelement. 
Die beiden sind dann natürlich die, die den größten Abstand zueinander haben.

So funktioniert es dann auch nicht nur für drei, sondern für beliebig viele Zahlen.


----------



## bulldozer (20. Okt 2012)

Das Leben kann so schön einfach sein.  
Danke für den Tipp!! Hast mir ein paar weitere Stunden meiner Lebenszeit gerettet. ;-)


----------



## JohannisderKaeufer (20. Okt 2012)

Kann man auch rekursiv lösen. 

```
public void foo(int a, int b, int c) {
  if(a > b) {
    foo(b, a, c);
  } else if(b > c) {
    foo(a, c, b); 
  } else {
    assert a <= b;
    assert b <= c;
    System.out.println("Größter Abstand zwischen "+ a +" und "+ c);
  }
}
```


----------

