Наименьшее нечетное число в данном массиве - PullRequest
0 голосов
/ 14 января 2019

Этот код должен найти наименьшее нечетное число в данном массиве и сохранить его в min, но когда я пытаюсь напечатать min, он всегда печатает 0.

int smallestodd(int x[5]){
  int j;
  int k[5];
  int p = 0;
  int r = 0;

  for(int h =0; h<5;h++){

    j = x[h] % 2;
    if(j == 1){
      int temp =x[h];
      k[p] =temp;
      p++;
    }
  }

  int min = k[0];


  while(k[r] !=0){
    if(k[r] < min ){
      min = k[r];
      r++;
    }
  }

  return min;
}

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Предполагая, что в массиве есть нечетное число - Допустим, попытка найти минимальное нечетное число в массиве с четными числами (или без чисел) - это UB :)

index = 0;
while (arr[index] % 2 == 0) index++; // skip even numbers
min = arr[index++]; // first odd number
while (index < length) {
    if (arr[index] % 2) {
        if (arr[index] < min) min = arr[index];
    }
    index++;
}
0 голосов
/ 14 января 2019

этот код позволяет избежать переполнения при поиске и возвращает 1 при обнаружении или 0, если массив содержит только четные числа.

int getMinOdd(int arr[], int length, int *value) {
    int found = 0;
    for(int idx=0; idx < length; idx++) {
        if (arr[idx] % 2) {
            if (!found || *value > arr[idx]) {
                *value = arr[idx];
            }
            found = 1;
        }
    }
    return found;
}
0 голосов
/ 14 января 2019

Это довольно просто на самом деле. Вам нужно просто проверить 2 условия в вашем массиве.

int smallestOdd(int arr[]){
    int min = 99999; //Some very large number
    for(int i = 0; i < (length of your array); i++) {
        if(arr[i]%2 != 0 && arr[i] < min) { //Check if number is odd and less than the current minimum value
            min = arr[i];
        }
    }
    return min;
}
...