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?

enter image description here

2
Opal Opal 28 Янв 2020 в 08:06

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");
}
0
ikegami 28 Янв 2020 в 08:08

min = A[1]; Здесь min уже инициализирован в 1. Итак,

if(min > A[i] && A[i]%2 ==0 ) min = A[i]; условие никогда не будет верным.

Добавьте файл заголовка limits.h и инициализируйте < Код > мин = INT_MAX ; макс = INT_MIN ;

0
Prince Kumar 28 Янв 2020 в 05:40