问题是您将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");
}