Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/75: Рейтинг темы: голосов - 75, средняя оценка - 4.55
3 / 3 / 3
Регистрация: 06.02.2018
Сообщений: 66

Найти в массиве второе по величине число

06.02.2018, 21:38. Показов 16707. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуста написать программу, которая в массиве {10,20,4,60, 50} найдет второе по величине число. Я сейчас хожу на уроки c++ программирование и у меня пока что нулевые знания. На уроках пока что научили операторам for, while, do_while,switch,if и сразу перешли в одномерные массивы. Кроме библиотеки <iostream> и сама <iostream> библиотека, тоже полностью не все функции мне понятны. Если можно напишите программу в этих рамках.Заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.02.2018, 21:38
Ответы с готовыми решениями:

Найти в массиве второе по величине число
Помогите пожалуйста в решении этих двух задач на С++ 2) Составить программу, которая в массиве A находит второе по величине число...

В массиве найти второе по величине число
Составить программу, которая в массиве А находит второе по величине число (вывести это число).

В массиве найти второе по величине число
составить программу, которая в массиве A(N) находит второе по величине число(вывести на печать число,кототое меньше максимального элемента...

23
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
06.02.2018, 22:02
Reflevmas, гуглим по форуму "site:cyberforum.ru второе по величине"
Определить второе по величине число
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
06.02.2018, 22:21
Reflevmas, Вы сможете сами ввести массив, затем использовать сортировку этого массива по убыванию
(например методом пузырька) ? - у Вас N=5
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=0; i<N-1; i++)
    {
        for (int j=0; j<N-i-1; j++)        
            if (a[j] < a[j+1]) 
                {
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp; 
            
                } 
    }
и вывести второй элемент полученного массива ? - напишите что получилось
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
06.02.2018, 22:43
Цитата Сообщение от Yetty Посмотреть сообщение
использовать сортировку
А если сортировка ненужна? Там в теме есть все, если надо закоментировал:
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
using namespace std;
 
void main() {
 
    int A[10];
    srand(time(NULL)); // рандом
    for (int i = 0; i < 10; i++) {
        A[i] = rand() % 20 + 1; // рандомное число
    }
    for (int i = 0; i < 10; i++) {
        cout << A[i] << ' '; // просто выводим
    }
    int temp;
    int temp2;
    for (int i = 1; i < 10; i++) { // ищем найбольшее
        if (i == 1) {
            temp = A[0]; // одинарный цикл
        }
        
        if (temp < A[i]) { // поиск найбольшего
            temp = A[i];
        }
    }
    cout << endl << temp << endl;
    for (int i = 1; i < 10; i++) { // ищем найбольшее после найбольшего(второе по велечине) 
        if (i == 1) {
            temp2 = A[0]; // одинарный цикл
        }
 
        if (A[i] < temp && temp2 < A[i]) {
            temp2 = A[i]; // сравнение с найбольшим 
        }
    }
    cout << temp2; // вывод
    
 
        _getch();
        return;
}
0
3 / 3 / 3
Регистрация: 06.02.2018
Сообщений: 66
06.02.2018, 23:06  [ТС]
Yetty, покапался в инете. И нашёл что-то вроде этого.Ну знаю работает код.Но не понял каким образом приписание значение my_arr[i] к mas2 имеет значение к my_arr[i]<max. Может у my_arr[i] значение 4: В этом случае зачем мне mas2 приписывать значение my_arr[i].

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
#include <iostream>
 
int main()
{
    int my_arr[]= {10,20,4,60,50};
    int n= sizeof(my_arr)/sizeof(my_arr[0]);
    int max=0, max2=0;
    int mas= my_arr[0];
    int mas2= my_arr[1];
    int i;
    for(i=0; i<n; i++)
    {
        if(max<my_arr[i]) { 
            max=my_arr[i];  // Находи самый большой элемент массива
        }
       if(my_arr[i]<max) 
        {
            mas2=my_arr[i];  // Находим числа меньше самого большого
        }
    }
    std::cout << max  << std::endl;
    std::cout << max2 << std::endl;
    for(int i=0; i<(n-1); i++)
    {
        if(ma2<mas2){
            max2=mas2;  // Находим второе по величине число
            std::cout << mas2 << std::endl;
        }
    }
    std::cout << std::endl;
    std::cout << "Второе по величине число = " << max2 << std::endl;
 
    return 0;
}
Добавлено через 3 минуты
Ребята в сообщении я забыл написать, что кроме int main() ничего нас не учили.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
06.02.2018, 23:09
Цитата Сообщение от RostikTawer Посмотреть сообщение
А если сортировка ненужна
не совсем понял кому не нужна ? в моём варианте нужна - в Вашем не нужна. Для ТС первый вариант будет легче для понимания и тренировки.

Алгоритм предложенный Вами знаю, но его нужно правильно реализовать. Вот результат работы Вашего варианта:
18 7 14 16 1 2 5 3 1 3
18
18

Как видите - выдаются неверные результаты
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
06.02.2018, 23:16
Reflevmas,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int* second_max(int *array, const size_t &n) 
{
    int *first = array,
        *second = nullptr;
    for (size_t i = 1; i < n; ++i) 
    {
        if (array[i] >= *first)  
        {
            second = first;
            first = array + i;
        }
    }
    return second;
}
Простейший вариант - возврат ссылки на 2й максимальный элемент. Если возвращен nullptr - значение не найдено.

Добавлено через 4 минуты
Если будешь сравнивать >= получишь 2й элемент в отсортированом массиве по убыванию. Если будешь сравнивать > получишь 2е значение после максимального.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
06.02.2018, 23:22
Reflevmas, почему нужно всё усложнять?

программа будет работать верно, если максимальное число массива не повторяется (т.е. одно). если нет - нужно добавлять код.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
using namespace std;
 
int main() {
 
    int a[5]={10,20,4,60, 50}, temp;
    for (int i=0; i<4; i++)
    {
        for (int j=0; j<4-i; j++)        
            if (a[j] < a[j+1]) 
                {
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp; 
            
                } 
    }
cout <<"max2="<<a[1];
system("pause"); 
return 0;
}
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
06.02.2018, 23:26
Yetty, мое решение прекрасно работает со сложностью O(n)

Цитата Сообщение от Yetty Посмотреть сообщение
почему нужно всё усложнять?
0
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
06.02.2018, 23:30
в один проход:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    int a[10];
 
    srand((unsigned)time(0));
    for(int i=0; i<10; i++) 
    {
        a[i]=rand()%100;
        cout<<a[i]<<" ";
    }
    cout<<endl;
    int f=*a,s;
    for(int i=1; i<10; i++)
        if(f<a[i])
        {
            s=f;
            f=a[i];
        }
        else
            if(s<a[i]) s=a[i];
    cout<<f<<"  "<<s<<endl;
0
3 / 3 / 3
Регистрация: 06.02.2018
Сообщений: 66
06.02.2018, 23:42  [ТС]
Yetty, спасибо большое программа работает, но я опять не понял каким способом.Не посоветуйте что мне прочитать. Мне конкретно не понятно вот эта часть. Заранее спасибо.
C++
1
2
3
4
5
6
7
8
for (int j=0; j<4-i; j++)        
            if (a[j] < a[j+1]) 
                {
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp; 
            
                }
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
06.02.2018, 23:45
Цитата Сообщение от Reflevmas Посмотреть сообщение
Мне конкретно не понятно вот эта часть
C++
1
2
3
4
5
6
7
8
for (int j=0; j<4-i; j++)     // цикл от 0 до 3(включая)  минус i
            if (a[j] < a[j+1]) // условие: если элемент меньше чем следующий, то выполнить след.
                {                             // если условие истинна(true) 
                    temp = a[j]; // во временную переменную присв. элемент
                    a[j] = a[j+1]; // изменяем значение элемента на значение след
                    a[j+1] = temp;  // а в следующий записать то что было в простом элементе
            
                }
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
06.02.2018, 23:46
Reflevmas, https://ru.wikipedia.org/wiki/... 0%BE%D0%BC
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
06.02.2018, 23:51
Reflevmas, это стандартный блок пузырьковой сортировки. элементы выстраиваются от большего к меньшему
( убывающая последовательность ). на ответ выводится второй элемент.
при этом максимальный должен быть один - иначе опять выведет максимальный (но в Вашем условии один максимальный элемент). больше про сортировки если интересно можете почитать здесь: Алгоритмы сортировок (но думаю что пока Вам это не нужно )

кроме сортировки есть и другие способы решить Вашу задачу
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
07.02.2018, 00:01
Цитата Сообщение от Reflevmas Посмотреть сообщение
Не посоветуйте что мне прочитать.
Литература C++
0
3 / 3 / 3
Регистрация: 06.02.2018
Сообщений: 66
07.02.2018, 00:42  [ТС]
Спасибо всем вам за терпение и помошь.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.02.2018, 01:45
Лучший ответ Сообщение было отмечено Reflevmas как решение

Решение

Reflevmas, сортировка это хорошо как для тренировки и знать её нужно. но конкретно для Вашей задачи
она выполняет циклы, которые не очень то и нужны. во-первых сортируется "хвост" последовательности. во-вторых происходит перемещение двух максимальных. поэтому потестируйте и такой вариант:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
using namespace std;
 
int main() {
 
    int a[5]={10,20,4,60,50}, max1=0, max2=0;
    
    for (int i=0; i<5; i++)
    if(i==0 || a[i] >= max1) max1 = a[i];    
    for (int i=0; i<5; i++)  
    if (a[i]<max1&&(i==0 || a[i] >= max2)) max2 = a[i];
    
    cout<<max2;
  system("pause");
  return 0;
}
1
07.02.2018, 02:16

Не по теме:

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

0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.02.2018, 03:17
Reflevmas, для положительных и такой вариант должен cработать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream> 
#include <algorithm>
using namespace std;
 
int main() {
 
    int a[5]={10,20,4,60,50}, imax;    
    
    for (int i=0; i<5; i++)     
    if (a[i]==*(max_element(a, a + 5))) 
    {
    a[i]=0;
    break;
    }  
    cout << *(max_element(a, a + 5));
system("pause");
return 0;
}
Добавлено через 13 минут
для случая когда максимальный элемент в массиве один
0
3 / 3 / 3
Регистрация: 06.02.2018
Сообщений: 66
07.02.2018, 07:45  [ТС]
Yetty спасибо большое за код.Кажется этот код я понял, но вот для чего понадобился i==0. Если не сложно и это объясните пожалуста.
C++
1
2
3
if(i==0 || a[i] >= max1) max1 = a[i];    
    for (int i=0; i<5; i++)  
    if (a[i]<max1&&(i==0 || a[i] >= max2)) max2 = a[i];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2018, 07:45
Помогаю со студенческими работами здесь

В массиве A[n] найти второе по величине число
Составить программу, которая в массиве A находит второе по величине число (вывести на печать число, которое меньше максимального элемента...

В массиве найти второе по величине число
Помогите пожалуйста в решении задач.. Составить программу, которая в массиве A находит второе по величине число (вывести на печать...

Функция: в массиве найти второе по величине число
Решить с помощью функции. Составить программу, которая в массиве A находит второе по величине число. (Вывести на печать число, которое...

Найти второе по величине четное число в линейном массиве
Найти второе по величине четное число в линейном массиве элементы массива - знаковые целые числа размером в слово (не менее 10) ) –...

Составить программу, которая в массиве A[N] находит второе по величине число
Составить программу, которая в массиве A находит вто* рое по величине число (вывести на печать число, которое мень* ше максимального...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru