Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для tottukki
0 / 0 / 0
Регистрация: 27.01.2018
Сообщений: 37

Рекурсия: поиск второго максимального числа из заданного набора целых чисел

01.02.2018, 20:49. Показов 878. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите рекурсивное решение для поиска второго максимального числа из заданного набора целых чисел.

Входные данные:
5
5 8 7 9 3
Вывод:
8
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2018, 20:49
Ответы с готовыми решениями:

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

Дан набор из n целых чисел. Найти номер первого максимального нечетного числа из данного набора
дано целое число n и набор из n целых чисел. найти номер первого максимального нечетного числа из данного набора. если нечетные числа в...

Используя рекурсию, найти все четные числа из заданного набора целых чисел
Помогите пожалуйста решить следующую задачу :) Используя рекурсию, найти все четные числа из заданного набора целых чисел. Массив не...

8
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
01.02.2018, 22:11
Например, вот так:

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
#include "stdafx.h"
#include <iostream>
 
using std::cout;
using namespace std;
 
auto main(int argc, char * argv[]) -> int
{
    extern auto maxrec(int * , size_t const) -> int;
    size_t const ARRSIZE {5};
    int array[ARRSIZE] {5, 8, 7, 9, 3};
    cout << maxrec(array, ARRSIZE) << '\n';
        
    system("pause");
    return EXIT_SUCCESS;
}
 
 
auto maxrec(int * arr, size_t const arrSize) -> int
{
    switch (arrSize)
    {
        case 2:
            return arr[0] < arr[1] ? arr[0] : arr[1];
        case 3:
            if (arr[0] <= arr[1] && arr[0] <= arr[2])
                return arr[1] < arr[2] ? arr[1] : arr[2];
            else if (arr[1] <= arr[0] && arr[1] <= arr[2])
                return arr[0] < arr[2] ? arr[0] : arr[2];
            else
                return arr[0] < arr[1] ? arr[0] : arr[1];
        default:
            if (arr[0] <= arr[1] && arr[0] <= arr[2])
                ;
            else if (arr[1] <= arr[0] && arr[1] <= arr[2])
                arr[1] = arr[0];
            else
                arr[2] = arr[0];
            return maxrec(arr + 1, arrSize - 1);        
    }
}
Ну и естественно предполагается, что эту функцию Вы будете вызывать с массивами размерности не меньше 2, и еще сама функция изменяет исходный массив, а поэтому, если он нужен для повторного использования, то предусмотрите копирование.
0
 Аватар для igorrr37
2869 / 2016 / 991
Регистрация: 21.12.2010
Сообщений: 3,720
Записей в блоге: 15
01.02.2018, 22:19
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
#include <iostream>
#include <algorithm>
#include <climits>
 
int n;
int* arr = nullptr;
int* parr = nullptr;
int res[2] = {INT_MIN, INT_MIN};
 
int main()
{
    if (nullptr == parr)
    {
        std::cout << "n = ";
        std::cin >> n;
        arr = new int[n];
        parr = arr;
        for (int i = 0; i < n; ++i)
        {
            std::cin >> arr[i];
        }
        if (n >= 2)
        {
            main();
        }
    }
    else if (arr + n == parr)
    {
        auto imm = std::minmax_element(res, res + 2);
        if (*imm.first != *imm.second)
        {
            std::cout << "Result: " << std::min(*imm.first, *imm.second) << std::endl;
        }
        else
        {
            std::cout << "nf\n";
        }
        delete[] arr;
        arr = nullptr;
        parr = nullptr;
    }
    else
    {
        auto imin = std::min_element(res, res + 2);
        if (*parr > *imin)
        {
            *imin = *parr;
        }
        ++parr;
        main();
    }
        
    return 0;
 
 
}
1
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
01.02.2018, 22:20
И алгоритм тут очень простой:

1) Если массив состоит из двух элементов, то тогда вернуть наименьший из них.
2) Если массив состоит из трех элементов, то тогда откинуть наименьший из них, а из оставшихся двух вернуть наименьший.
3) Если массив состоит из более чем трех элементов, то тогда из первых его трех элементов откинуть наименьший элемент посредством возможного его обмена с нулевым элементом этого массива, а затем вызвать данную функцию на оставшихся элементах, число которых теперь уменьшено на единицу.

Допускается вариация этого алгоритма. Например, наименьший элемент из трех можно искать не среди трех первых, а среди трех его последних.
1
 Аватар для Hitoku
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
01.02.2018, 22:24
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
#include <iostream>
#include <vector>
#include <algorithm>
 
int Rmax(std::vector<int> a, int n, int size) {
    if (size == 2) {
        if (a[0] == n || a[1] == n)
            return std::min(a[0], a[1]);
        else return std::max(a[0], a[1]);
    }
    else if (a[size - 1] != n)
        return std::max(a[size - 1], Rmax(a, n, size - 1));
    else
        return Rmax(a, n, size - 1);
}
 
int main()
{
    std::size_t n; std::cin >> n;
    std::vector<int> a(n);
    for (std::size_t i = 0; i < n; i++)
        std::cin >> a[i];
    std::vector<int>::iterator max_iterator = std::max_element(a.begin(), a.end());
    std::cout << Rmax(a, a[std::distance(a.begin(), max_iterator)], a.size()) << "\n";
    system("pause");
}
Добавлено через 46 секунд

Не по теме:

Ух ты, как я долго писал :D тема ещё пустая была

1
13 / 13 / 5
Регистрация: 18.06.2017
Сообщений: 31
01.02.2018, 22:48
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int second_max_element(int array[], int size, int _first = 0, int _second = 0) {
    if (size == 0) {
        return _second;
    }
    else {
        --size;
        if (array[size] > _first) {
            return second_max_element(array, size, array[size], _first);
        }
        else if (array[size] > _second) {
            return second_max_element(array, size, _first, array[size]);
        }
        else {
            return second_max_element(array, size, _first, _second);
        }
    }
}
1
 Аватар для tottukki
0 / 0 / 0
Регистрация: 27.01.2018
Сообщений: 37
01.02.2018, 23:04  [ТС]
thank u for your variant. it helps a lot)
0
13 / 13 / 5
Регистрация: 18.06.2017
Сообщений: 31
01.02.2018, 23:04
#6. line 10, fix:
C++
1
else if (array[size] > _second && array[size] != _first) {
0
 Аватар для tottukki
0 / 0 / 0
Регистрация: 27.01.2018
Сообщений: 37
01.02.2018, 23:05  [ТС]
thank u . i got ur idea)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2018, 23:05
Помогаю со студенческими работами здесь

Дано целое число N и набор из N целых чисел. Найти номер первого максимального нечетного числа из данного набора ...
Здравствуйте помогите, пожалуйста решить задачи в си шарп: 1. Описать функцию RadToDeg(R) вещественного типа, находящую величину угла...

Дано целое число N и набор из N целых чисел.Найти номер первого максимального нечетного числа из данного набора
дано целое число N и набор из N целых чисел.Найти номер первого максимального нечетного числа из данного набора.Если нечетные числа в...

Рекурсия, поиск второго максимального элемента
Не получается выполнить задание: Данная последовательность натуральных чисел (одно число в строке), что завершается числом 0. ...

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

Найти номер первого максимального нечетного числа из заданного набора
помогите пожалуйста разобраться minmax((( дано целое число N и набор из N целых чисел: 1)найти номер первого max-го нечетного числа...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru