Ein Array hat 34 zaheln diese gehen von 1 bis 35 ich soll schauen welche Zahl von 1-35 nicht enthalten ist und die ausgeben, wie mache ich das (Java)?

4 Antworten

Neben den bereits genannten Lösungen mit der Summe könnte man das Array auch sortieren (sort) und anschließend durchlaufen und schauen welche Zahl nicht der erwarteten entspricht. Man könnte auch ein Array mit 35 Boolean-Werten anlegen, mit Index stellvertretend für die Zahlen 1-35. Dann das Array durchlaufen und den jeweiligen Index auf 1 setzen. So könnte man später auch Doppellungen erkennen, oder mehrere fehlende Zahlen...

Das ist eine doofe Aufgabe....

Am Anfang würde ich das ganze Array in einen String umwandeln

Dann würde ich mit einer Zählerscheife weiter machen.

Du beginnst mit 1 und prüfst in jedem Durchgang ob der Wert des Zählers als Substring vorhanden ist.

Wenn nein brichst Du schleife ab und gibst den Wert des Zählers zurück.

Das ist zwar ziemlich quick and dirty aber müsste funktionieren

PixelManuel  16.10.2021, 03:24

Wenn die 6 fehlt, findest du mit einem Substring dennoch die 16 und 26.

0
stealthuser  16.10.2021, 03:40
@PixelManuel

Man könnte beim joinen Semikolons verwenden und am Anfang so wie am Ende noch ein Semikolon anhängen

Bei der Umwandlung des Zähles in einen Substring zum Suchen mache ich das selbe.

ich durchsuche den String also nicht nach 6 sondern nach ;6;

Kann natürlich sein, dass andere Trennzeichen günstiger sind, wenn man sich dadurch eine Maskierung sparen kann.

Das hätte ich vielleicht noch näher ausführen sollen - wobei ich fürchte das mein Weg nicht unbedingt das ist, was der Buchautor als Lösung erwartet.

0
kmkcl  16.10.2021, 09:02
@stealthuser

Typischerweise würde man dazu sagen: "Von hinten durch die Brust ins Auge" 😂

Man könnte auch das Array direkt durchsuchen.

0
stealthuser  16.10.2021, 09:11
@kmkcl

Stimmt einen Schönheitswettbewerb hätte ich damit bestimmt nicht gewonnen. Aber es zeigt zumindest, dass es fast immer mehrere Möglichkeiten gibt um ein Problem zu lösen.

0

Die Summe errechnen und von 630 abziehen oder von 630 fortlaufend die einzelnen Felder abziehen. Das geht mit einer Schleife. Das Ergebnis ist die fehlende Zahl.

35 ist die höchste Zahl des theoretisch fortlaufenden Feldes von 1 bis 35. Nenne sie Z, dann gilt:

630 ist die Summe von 1 bis Z, die sich errechnet aus Z / 2, aufgerundet, x Z. Wenn es 36 wäre (eine gerade Zahl) dann wäre die Rechnung Z / 2 x (Z+1).

Du berechnest die Summe der Elemente, die das Array hätte, wenn keine Zahl fehlen würde. Dafür einfach (n * (n+1))/2 rechnen, wobei n = Länge des Arrays +1.

Dann ziehst du davon die tatsächliche Summe ab. Nun weißt du den fehlenden Wert.

int[] arr = {1,10,2,4,6,7,8,3,9};
int sum = ((arr.length+1)*(arr.length+2)) / 2;
for (int i : arr) sum -= i;
System.out.println(sum);
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf