Написать рекурсивную функцию, возвращающую третье по величине число в массиве - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток друзья. тут вот такая задачка. надо сделать рекурсивную функцию. функция получает массив целый чисел и его размер. размер массива минимум 3. функция возвращает 3-ие по велечене число в массиве. функция "проходит" только один рас по всему массиву и не меняет в нем не чего. пример: массив={3,7,4,500,6,3,400,9,300,2,8,5,1} функция возвращает 300. main выводит на экран ответ. заранее спасибо)

Решение задачи: «Написать рекурсивную функцию, возвращающую третье по величине число в массиве»

textual
Листинг программы
void swap_ints(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
 
int search_third(int* arr, int n)
{
    static int maximums[3] = { INT_MIN, INT_MIN, INT_MIN };
    int max;
    
    if(n--)
    {
        max = arr[n];
        if(max > maximums[0])
        {
            swap_ints(maximums + 2, maximums + 1);
            swap_ints(maximums + 1, maximums);
            maximums[0] = max;
        }
        search_third(arr, n);
    }
    return maximums[2];
}
 
int main()
{
    int mas[] = {3,7,4,500,6,3,400,9,300,2,8,5,1};
    printf("%d\n", search_third(mas, sizeof(mas)/sizeof(int)));
    return 0;
}

Объяснение кода листинга программы

  1. В функции swap_ints происходит обмен значениями двух указателей на int.
  2. В функции search_third массив arr содержит некоторое количество чисел.
  3. В функции search_third имеется статический массив maximums, в котором хранятся три минимальных значения.
  4. Переменная n содержит количество элементов в массиве arr.
  5. В функции search_third выполняется рекурсивный вызов функции search_third с уменьшенным значением n.
  6. В функции search_third происходит поиск третьего по величине числа в массиве arr путем сравнения максимального значения в массиве arr с значениями в массиве maximums.
  7. Если максимальное значение в массиве arr больше максимального значения в массиве maximums, то значения в массиве maximums переставляются так, чтобы максимальное значение в массиве arr стало третьим по величине.
  8. Затем происходит рекурсивный вызов функции search_third с уменьшенным значением n.
  9. В конце функции search_third возвращается третье по величине значение из массива arr.
  10. В функции main создается массив mas, содержащий некоторые числа.
  11. Функция search_third вызывается в функции main с массивом mas и его размером в качестве аргументов.
  12. Результат работы функции search_third выводится на экран.
  13. Возвращаемое значение функции search_third содержит третье по величине число в массиве mas.
  14. Все числа в массиве mas меньше или равны возвращаемому значению функции search_third.
  15. Все числа в массиве mas больше или равны второму по величине числу в массиве mas.
  16. Все числа в массиве mas меньше или равны второму по величине числу в массиве mas.
  17. В функции main выполняется рекурсивный вызов функции main с уменьшенным значением n.
  18. В функции main создается массив mas, содержащий некоторые числа.
  19. Функция search_third вызывается в функции main с массивом mas и его размером в качестве аргументов.
  20. Результат работы функции search_third выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы