Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Timama
10 / 10 / 9
Регистрация: 30.03.2016
Сообщений: 163
1

Написать рекурсивную функцию, возвращающую третье по величине число в массиве

10.05.2016, 21:30. Просмотров 850. Ответов 3
Метки нет (Все метки)

Доброго времени суток друзья.
тут вот такая задачка.
надо сделать рекурсивную функцию.
функция получает массив целый чисел и его размер.
размер массива минимум 3.
функция возвращает 3-ие по велечене число в массиве.
функция "проходит" только один рас по всему массиву и не меняет в нем не чего.
пример:
массив={3,7,4,500,6,3,400,9,300,2,8,5,1}
функция возвращает 300.
main выводит на экран ответ.
заранее спасибо)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2016, 21:30
Ответы с готовыми решениями:

Написать функцию, возвращающую число ||x-1|-2/|x-3||
Написать функцию, получающую в качестве аргумента вещественное число x и возвращающую вещественное...

Написать функцию, возвращающую число десятков целого числа
Написать функцию, возвращающую число десятков целого числа. Не использовать стандартные операции.

Написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине числа
Я не совсем понимаю, почему у меня не работает. Он кричит на библиотеку stdafx.h //Написать...

Написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине числа
Нужно написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине...

Разработать рекурсивную функцию,возвращающую значение,для вычисления наибольшего значения в одномерном массиве
Разработать рекурсивную функцию,возвращающую значение,для вычисления наибольшего значения в...

3
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 1,000
10.05.2016, 23:45 2
C
1
2
3
4
5
6
7
8
insert(){
}
 
int Num Search(int *arr, int n){
static arr_int[3] = {INT_MIN, INT_MIN, INT_MIN }; // константа такая
insert(arr[n-1], arr_int); // надо отдельно реализовать функцию вставки в массив, чтобы массив был упорядочен
return ( n==0 ) ? min (arr_int[0], min ( arr_int[1], arr_int[2] ) ) : Search(arr , --n); 
}
больше в 3 часа ночи на ум не пришло
создать массив из 3-х элементов и проходя по исходному массиву, в зависимости от значения, вставлять в 3-х элементный массив...
1
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.05.2016, 12:29 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
Timama
10 / 10 / 9
Регистрация: 30.03.2016
Сообщений: 163
13.05.2016, 21:56  [ТС] 4
Спасибо в конце сам разобрался)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
 
void temp(int* arr) {/*функция для поправления, от мелкого в большому*/
    int tmp;
    for (int i = 0;i < 3;i++) {/*сделать все возможные комбинации*/
        if (arr[0] > arr[1]) {/*если первое больше второго*/
            tmp = arr[1];
            arr[1] = arr[0];
            arr[0] = tmp;
        }
        if (arr[1] > arr[2]) {/*если второе больше третьего*/
            tmp = arr[2];
            arr[2] = arr[1];
            arr[1] = tmp;
        }
    }
}
 
void search_third(int* arr, int n, int* maximums){
    if (n == 0)/*стоп*/
        return;
    search_third(arr, n - 1, maximums);/*рекурсия*/
    if (arr[n - 1] > maximums[0] && arr[n - 1] < maximums[1])/*когда менять первый номер*/
        maximums[0] = arr[n - 1];
    if (arr[n - 1] > maximums[1] && arr[n - 1] < maximums[2]) {/*когда менять второй, следовательно старый он теперь самый маленький*/
        maximums[0] = maximums[1];
        maximums[1] = arr[n - 1];
    }
    if (arr[n - 1] > maximums[1] && arr[n - 1] > maximums[2]) {/*когда менять третий*/
        maximums[0] = maximums[1];
        maximums[1] = maximums[2];
        maximums[2] = arr[n - 1];
    }
    temp(maximums);/*составить по возрастанию*/
}
    
int main()
{
    int *mas = NULL, size, maximums[3];/*оснавной массив, его велечина, вспомогательный массив*/
    printf("Enter a size of your array: ");
    scanf("%d", &size);
    mas = (int*)calloc(size, sizeof(int));/*Выделение памяти*/
    if (!mas)/*проверка*/
        return 0;
    printf("Enter a array: ");/*ввод массива*/
    for (int i = 0;i < size;i++)
        scanf("%d", &mas[i]);
    for (int i = 0;i < 3;i++)/*переписать первые три чесла в спомогательный*/
        maximums[i] = mas[i];
    search_third(mas, size,maximums);/*функция ищащуя 3-е по велечене число*/
    printf("The third biggerst number is: %d\n",maximums[0]);/*вывод на экран*/
    free(mas);/*освобождение памяти*/
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2016, 21:56

Написать функцию, возвращающую индекс числа в массиве
Здравствуйте, помогите пожалуйста решить задачу: создать функцию, которая принимает одномерный...

Написать функцию, возвращающую случайное число от 2 до 6
Покажите как будет выглядеть программа подставляющая числа от 2до6 (рандом) в формулу ПR(5...

Написать функцию, возвращающую количество простых чисел в передаваемом ей массиве
Написать функцию, возвращающую количество простых чисел в передаваемом ей массиве. и объяните как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru