Написать рекурсивную функцию, возвращающую третье по величине число в массиве - 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 выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д