Проблема в том, что вы инициализируете min
и max
значением, которое может быть не четным.
Ниже приведено эффективное решение, которое обрабатывает пустые массивы, массивы, содержащие только нечетные числа, и массивы содержит только INT_MAX
:
int A[] = {1,2,3,4,5,6,7,8,9,10};
size_t n = 10;
size_t found_even = 0;
int min, max;
while (n--) {
int val = A[n];
if ((A[n] & 1) == 0) { // Assumes a 2's complement machine.
if (found_even++) {
if (A[n] < min) min = A[n];
else if (A[n] > max) max = A[n];
} else {
min = val;
max = val;
}
}
}
if (found_even) {
printf("Minimum even: %d\n", min);
printf("Maximum even: %d\n", max);
} else {
printf("Minimum even: <none>\n");
printf("Maximum even: <none>\n");
}
Чуть быстрее:
int A[] = {1,2,3,4,5,6,7,8,9,10};
size_t n = 10;
int found_even = 0;
int min, max;
while (n--) {
int val = A[n];
if ((A[n] & 1) == 0) { // Assumes a 2's complement machine.
min = val;
max = val;
found_even = 1;
break;
}
}
if (found_even) {
while (n--) {
if ((A[n] & 1) == 0) {
if (A[n] < min) min = A[n];
else if (A[n] > max) max = A[n];
}
}
printf("Minimum even: %d\n", min);
printf("Maximum even: %d\n", max);
} else {
printf("Minimum even: <none>\n");
printf("Maximum even: <none>\n");
}