Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- In Lösung fehler? (http://www.informatikerboard.de/board/thread.php?threadid=2126)


Geschrieben von neuling96 am 01.02.2015 um 01:56:

  In Lösung fehler?

Ich glaube die Lösung scheint nicht so zu stimmen??

bei b hätte ich einen einwand
public void turn(int i){

for( int y=0; y<= (i+1)/2; y++){
int temp=a[y];
a[y]= a[i-y];
a[i-y]= temp;
}
}



Geschrieben von eulerscheZahl am 01.02.2015 um 08:03:

 

Die Musterlösung und dein Code machen fast das selbe.
MIt einem Unterschied: for( int y=0; y<= (i+1)/2; y++){
y geht zu weit, weshalb du bei ungeradem i die innersten Elemente doppelt tauschst.
Bsp.: i = 3
y = 0, 1, 2 wird getauscht mit 3, 2, 1, also erst 1<->2 und dann 2<->1.
Daher ist die Musterlösung korrekt, deine jedoch nicht.



Geschrieben von neuling96 am 01.02.2015 um 08:50:

 

so müsste es gehen?

public static void turn(int i){
for( int y=0; y<i/2; y++){
int temp=a[y];
a[y]= a[i-y];
a[i-y]= temp;
}
}



Geschrieben von neuling96 am 01.02.2015 um 09:00:

 

for( int y=0; y<=i/2; y++)



Geschrieben von eulerscheZahl am 01.02.2015 um 09:09:

 

Mit y<=i/2 tauschst du bei einer ungeraden Anzahl von Arrayelementen (=geradzahliges i) den mittleren Eintrag mit sich selbst. Das ist nicht falsch, aber unnötig. Das Minimum an Vertauschungen kriegst du mit y < (i+1)/2.



Geschrieben von neuling96 am 01.02.2015 um 09:33:

 

stimmt smile

danke Wink


Forensoftware: Burning Board, entwickelt von WoltLab GmbH