int i,max,min;
int A[11];
min = A[1];
max = A[1];
for(i=1;i<=10;i++)
{
if(min > A[i] && A[i]%2 ==0 ) min = A[i];
if(max < A[i] && A[i]%2 ==0 ) max = A[i];
}
printf("Minimum Even : %d\n",min);
printf("Maximum Even : %d\n",max);
getch();
}
Когда я заполняю свой массив 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Почему минимальное четное число равно 1?
2 ответа
Проблема в том, что вы инициализируете 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");
}
min = A[1];
Здесь min уже инициализирован в 1. Итак,
if(min > A[i] && A[i]%2 ==0 ) min = A[i];
условие никогда не будет верным.
Добавьте файл заголовка limits.h
и инициализируйте < Код > мин = INT_MAX ; макс = INT_MIN ; код >
Похожие вопросы
Связанные вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.