0 / 0 / 0
Регистрация: 23.12.2017
Сообщений: 8
1

Найти два наибольших числа в последовательности

23.12.2017, 13:41. Показов 5945. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1)Дана последовательность из М чисел. Найти в ней два наибольших числа.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2017, 13:41
Ответы с готовыми решениями:

Оператор for,if ( найти два наибольших числа)
Подскажите пожайлуста....начал самостоятельно изучать С++, в основном по Дейтелу Х.М. но и...

Найти два наибольших числа из десяти
С одним числом написал, а вот чтобы найти два числа ума не хватает. Нужно использовать только одну...

Найти два наибольших простых числа в матрице
Помогите,пожалуйста Задана матрица целых чисел A(m,n). Найти два наибольших простых числа....

Даны четыре разных числа. Найти среди них два наибольших
Задача: Даны четыре разных числа. Найти среди них два наибольших. С применением if. Помогите...

7
0 / 0 / 0
Регистрация: 23.12.2017
Сообщений: 8
23.01.2018, 17:19  [ТС] 2
(((
0
1754 / 1346 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
23.01.2018, 17:33 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
#include <iostream>
 
int main()
{
    int max1 = INT_MIN, max2 = INT_MIN, m, i = 1;
    std::cout << "M = "; std::cin >> m;
    while (i != m + 1) {
        int num = 0;
        while (num < 2) {
            std::cout << "Number " << i << ": ";
            std::cin >> num;
        }
        if (num > max1) {
            if (max1 > max2) max2 = max1;
            max1 = num;
        }
        else if (num > max2) {
            if (max2 > max1) max1 = max2;
            max2 = num;
        }
        i++;
    }
    std::cout << "Max1 = " << max1 << "\nMax2 = " << max2 << "\n";
    system("pause");
}
1
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.01.2018, 18:44 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
#include <iostream>
using namespace std;
 
int main()
{
    srand(time(0)); 
    int M;
    double temp;
    cout << "Enter M: "; cin >> M;
 
    // объявление динамического массива
 
    double *a = new double [M];
 
    // заполнение массива случайными числами от 0 до 20 и вывод на экран
 
    for (int i = 0; i < M; i++) 
    {
    a[i]= rand() % 21;
    cout << a[i] << "  ";
    }                         
    cout <<endl;
    
    // сортировка по убыванию
    
    for (int i=0; i<M-1; i++)
    {
        for (int j=0; j<M-i-1; j++)        
            if (a[j] < a[j+1]) 
                {
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;             
                } 
    } 
    
    // вывод двух первых отсортированных
    
    cout << "max1="<<a[0] <<" max2="<<a[1];    
    
    // освобождение памяти отводимой под массив: 
 
    delete [] a;
system("pause");
return 0;
}
скорее всего количество циклов можно уменьшить
1
1754 / 1346 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
23.01.2018, 21:06 5
Yetty, можно сделать много короче
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
    int m; std::cout << "m = "; std::cin >> m;
    std::vector<int> vec(m);
    for (auto& v : vec) std::cin >> v;
    std::sort(vec.rbegin(), vec.rend());
    std::cout << vec[0] << " " << vec[1] << "\n";
    system("pause");
}
1
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.01.2018, 22:15 6
Цитата Сообщение от Hitoku Посмотреть сообщение
Yetty, можно сделать много короче
не сомневаюсь. только объснять преподу TC будет длиннее
1
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
23.01.2018, 23:30 7
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
#include <utility>
// Returm first max and second max, if them exists
// if some not exists, return end
template<typename IteratorType, typename Comparer>
std::pair<IteratorType, IteratorType>
get_max_two(IteratorType first, IteratorType end, Comparer comp)
{
    IteratorType max1 = first;
    IteratorType max2 = end;
    if (first == end)
        return std::make_pair(end, end);
    for (IteratorType it = first + 1; it != end; ++it)
    {
        auto less = comp(*it, *max1), greater = comp(*max1, *it);
        if (greater)
        {
            max2 = max1;
            max1 = it;
        }
        if (!greater && !less)
        {
            max2 = it;
        }
    }
    return std::make_pair(max1, max2);
}
 
template<typename IteratorType>
inline std::pair<IteratorType, IteratorType>
get_max_two(IteratorType first, IteratorType end)
{
    return get_max_two(first, end, std::less<decltype(*first)>());
}
Добавлено через 1 минуту
Проверочный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    int arr[10] = { 4,87,97,15,8};
    auto maxims = get_max_two(&arr[0], &arr[0] + 10);
    std::cout << *maxims.first << " " << *maxims.second << "\n";
    arr[9] = 97;
    maxims = get_max_two(&arr[0], &arr[0] + 10);
    std::cout << *maxims.first << " " << *maxims.second << "\n";
    float arr2[1] = { 1 };
    auto mx = get_max_two(&arr2[0], &arr2[0] + 1);
    if (mx.second == &arr2[0] + 1)
    {
        std::cout << "First max is " << *mx.first << "\n";
        std::cout << "Cannot get second max\n";
    }
    system("pause");
}
Добавлено через 13 минут
Ну, и итоговая программа, которую можешь сдавать
Надо отметить, что она оптимальнее тех, что кидали выше.
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
58
#include <utility>
template<typename IteratorType, typename Comparer>
std::pair<IteratorType, IteratorType>
get_max_two(IteratorType first, IteratorType end, const Comparer& comp)
{
    IteratorType max1 = first;
    IteratorType max2 = end;
    if (first == end)
        return std::make_pair(end, end);
    for (IteratorType it = first + 1; it != end; ++it)
    {
        auto less = comp(*it, *max1), greater = comp(*max1, *it);
        if (greater)
        {
            max2 = max1;
            max1 = it;
        }
        if (!greater && !less)
        {
            max2 = it;
        }
    }
    return std::make_pair(max1, max2);
}
 
template<typename IteratorType>
inline std::pair<IteratorType, IteratorType>
get_max_two(IteratorType first, IteratorType end)
{
    return get_max_two(first, end, std::less<decltype(*first)>());
}
 
#include <iostream>
#include <vector>
int main()
{
    int m; std::cout << "m = "; std::cin >> m;
    std::vector<int> vec(m);
    for (auto& v : vec) std::cin >> v;
    auto maxes = get_max_two(vec.cbegin(), vec.cend());
    if (maxes.first == vec.cend())
    {
        std::cout << "Empty set\n";
    }
    else
    {
        std::cout << "First is " << *maxes.first << "\n";
    }
    if (maxes.second == vec.cend())
    {
        std::cout << "Not have second\n";
    }
    else
    {
        std::cout << "Second is " << *maxes.second << "\n";
    }
    system("pause");
}
1
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
24.01.2018, 00:07 8
Вариант для "эстетов")
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <set>
 
int main()
{
    int a[] = {2,4,5,7,5,56,43,85,3,7,9,3};
    std::set<int> s(a, a+sizeof(a) / sizeof(int));
    auto it = s.rbegin();
    std::cout << *it << "\n";
    ++it;
    std::cout << *it << "\n";
}
1
24.01.2018, 00:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2018, 00:07
Помогаю со студенческими работами здесь

Даны четыре разных числа. Найти среди них два наибольших
Даны четыре разных числа. Найти среди них два наибольших. Чет я не понимаю как это все написать...

Найти два наибольших числа из всех введенных, при условии что цифры не повторяются
Вот сижу над очередной задачкой. Найти 2 наиболее высоких числа из 10 введенных, при условии что...

Вводится последовательность чисел, 0 – конец последовательности. Найти два наибольших числа
Вводится последовательность чисел, 0 – конец последовательности. Найти два наибольших числа

Вводится последовательность чисел из 7 n элементов. Найти два наибольших элемента последовательности
Добрый день, помогите пожалуйста разобраться с задачей. Вводиться последовательность чисел из 7 n...

Найти два наибольших числа из четырёх используя if
Составить программу нахождения двух наибольших из четырёх чисел и вывести их в порядке...

Ввести N чисел с клавиатуры. Найти два наибольших числа
Здравствуйте. Я не давно начал работать с C#, мне попалась задачка и у меня возникли с ней...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru