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
danke
Forensoftware: Burning Board, entwickelt von WoltLab GmbH