Написать рекурсивную функцию, возвращающую третье по величине число в массиве - 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;
- }
Объяснение кода листинга программы
- В функции swap_ints происходит обмен значениями двух указателей на int.
- В функции search_third массив arr содержит некоторое количество чисел.
- В функции search_third имеется статический массив maximums, в котором хранятся три минимальных значения.
- Переменная n содержит количество элементов в массиве arr.
- В функции search_third выполняется рекурсивный вызов функции search_third с уменьшенным значением n.
- В функции search_third происходит поиск третьего по величине числа в массиве arr путем сравнения максимального значения в массиве arr с значениями в массиве maximums.
- Если максимальное значение в массиве arr больше максимального значения в массиве maximums, то значения в массиве maximums переставляются так, чтобы максимальное значение в массиве arr стало третьим по величине.
- Затем происходит рекурсивный вызов функции search_third с уменьшенным значением n.
- В конце функции search_third возвращается третье по величине значение из массива arr.
- В функции main создается массив mas, содержащий некоторые числа.
- Функция search_third вызывается в функции main с массивом mas и его размером в качестве аргументов.
- Результат работы функции search_third выводится на экран.
- Возвращаемое значение функции search_third содержит третье по величине число в массиве mas.
- Все числа в массиве mas меньше или равны возвращаемому значению функции search_third.
- Все числа в массиве mas больше или равны второму по величине числу в массиве mas.
- Все числа в массиве mas меньше или равны второму по величине числу в массиве mas.
- В функции main выполняется рекурсивный вызов функции main с уменьшенным значением n.
- В функции main создается массив mas, содержащий некоторые числа.
- Функция search_third вызывается в функции main с массивом mas и его размером в качестве аргументов.
- Результат работы функции search_third выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д