Warum ist Code 1-Lösung 5 und Code 2-Lösung 0 (C++)?
Wie der Titel halt sagt: Warum haben die eine unterschiedliche Lösung, wenn sich nur die Position vom int return ändert?
Code 1:
#include <cstdio>
int second_smallest(int array[], int size) {
int check = array[0];
int s_pos;
for (int i = 0; i < size; ++i) {
if (array[i] < check) {
check = array[i];
s_pos = i;
}
}
int result;
for (int j = 0; j < size; ++j) {
if (array[j] < result && j != s_pos) {
result = array[j];
}
}
return result;
}
int main() {
int arr[6] = { 3, 6, 6, 9, 3, 9 };
int r = second_smallest(arr, 6);
printf("%i", r);
}
Code 2:
#include <cstdio>
int second_smallest(int array[], int size) {
int check = array[0];
int s_pos;
int result;
for (int i = 0; i < size; ++i) {
if (array[i] < check) {
check = array[i];
s_pos = i;
}
}
for (int j = 0; j < size; ++j) {
if (array[j] < result && j != s_pos) {
result = array[j];
}
}
return result;
}
int main() {
int arr[6] = { 3, 6, 6, 9, 3, 9 };
int r = second_smallest(arr, 6);
printf("%i", r);
}
1 Antwort
Vom Fragesteller als hilfreich ausgezeichnet
Du solltest Variablen immer direkt mit Wert anlegen. Das verhindert unerwartete Ergebnisse (result, s_pos ganz besonders)
Dein Algorithmus berücksichtigt nicht, dass Werte redundant sein können.
verreisterNutzer
13.11.2023, 01:31
@Vrunchy
Ich vermute dass das an dem unsauberen Code liegt
Übrigens dein Array ist auch einen Wert zu groß. Der beginnt immer bei Index 0.
Du kannst auch einfach aus algorithm-Lib max_element nutzen. Das macht genau das, was du willst. Das größte Element aus dem Array suchen. Nur halt in einer Zeile.
aber wieso ist da ein unterschied bei der lösung von den beiden codes? Am ende wird einfach int result etwas später erstellt?