Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/140: Рейтинг темы: голосов - 140, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 42

Найти второй максимум в последовательности чисел

08.01.2019, 20:34. Показов 28276. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана последовательность целых чисел, оканчивающаяся нулём. Необходимо найти число, наиболее близкое к максимальному по величине числу в этой последовательности (второй максимум). Ноль числом последовательности не считается.

Формат входных данных

Вводится не более чем 215 целых чисел, каждое из которых не превосходит по модулю 215−1. После последнего числа вводится Гарантируется, что последовательность содержит хотя бы два элемента.

Формат выходных данных

Требуется вывести искомое число.

Не могу понять, почему не получается:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main()
{
    signed short int max1 = 0, max2 = 0, n = 1;
 
    while (n != 0) {
        cin >> n;
        if (n >= max1){
            max2 = max1;
            max1 = n;
        }
    }
    cout << max2;
    return 0;
}
Помогите пожалуйста!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.01.2019, 20:34
Ответы с готовыми решениями:

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

Найти максимум из девяти чисел(максимум из трех чисел(максимум из двух чисел)
Сделал кароч ток не знаю что в конце писать вот код: function maks_2(a,b:real):real; begin if a&gt;b then maks_2:=a else...

В последовательности из n действительных чисел найти максимум из модуля элементов
Найти максимум из модуля элементов использовать одномерный массив

62
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.01.2019, 23:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Skyer Посмотреть сообщение
Надо взять -1.
не -1, а минимальное для этого типа данных
0
 Аватар для Skyer
78 / 62 / 47
Регистрация: 05.05.2013
Сообщений: 196
08.01.2019, 23:10
Yetty, Точно. Что-то я торможу, подумал про неотрицательные числа. пойду спать.

Как вариант можно перед циклом ввести два числа и их распределить в max1 и max2

Про второй максимум в тексте же в скобках сказано, как вы определили, что это ТС добавила?
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 42
08.01.2019, 23:39  [ТС]
входные данные
33
32
33
0
выходные данные
33
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
08.01.2019, 23:47
Цитата Сообщение от HateLov Посмотреть сообщение
входные данные
33
32
33
0
выходные данные
33
Код выше у меня выводит 32, вы где-то ошиблись
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.01.2019, 01:20
Цитата Сообщение от ReDoX Посмотреть сообщение
Код выше у меня выводит 32
почему Вы решили что это относится именно к Вашему коду ? что касается Вашего кода, не проверял, но он должен отсортировать и вывести второе числа справа, т.е. 33.
но дело не в этом. ТС нужен код на последовательность, без массивов и векторов.
Цитата Сообщение от HateLov Посмотреть сообщение
входные данные
33
32
33
0
выходные данные
33
эти данные немного под другое условие: Дана последовательность целых чисел, оканчивающаяся нулём. Необходимо найти второе максимальное по величине число (второй максимум). Ноль числом последовательности не считается.
проверил, код по ссылке, которую я Вам дал именно это и делает.
чтобы обработать условие:
Цитата Сообщение от HateLov Посмотреть сообщение
Вводится не более чем 215 целых чисел, каждое из которых не превосходит по модулю 215−1.
спрашиваю ещё раз - уточните что такое:
Цитата Сообщение от HateLov Посмотреть сообщение
по модулю 215−1.
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
09.01.2019, 01:24
Цитата Сообщение от Yetty Посмотреть сообщение
почему Вы решили что это относится именно к Вашему коду ?

Не по теме:

я не про свой код а про код который кинул последним Skyer

0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.01.2019, 01:42
ReDoX, понятно. интереснее найти решение такой задачи: найти наиболее близкое к максимуму число, отличное от максимума. как раз последний код Skyer вроде это и делает, ещё не проверял.
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 42
09.01.2019, 14:05  [ТС]
по модулю 2^15 - 1
signed short int
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.01.2019, 14:39
HateLov, signed записывать необязательно, достаточно short int (или просто short). воспользовались кодом по ссылке ? напишите, что получилось.

лучше будет подключить #include<climits> и заменить INT_MIN на SHRT_MIN
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 42
09.01.2019, 15:24  [ТС]
Цитата Сообщение от ReDoX Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <algorithm>
#include <iostream>
#include <vector>
 
using namespace std;
 
int main() {
  int n = 1;
 
  vector<int> a;
 
  while (n != 0) {
    cin >> n;
 
    a.push_back(n);
  }
 
  sort(a.begin(), a.end());
 
  cout << a[a.size() - 2];
}
При вводе:
-5
-4
-3
-2
0
Выводит:
-3
А нужно:
-2
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
09.01.2019, 15:26
Цитата Сообщение от HateLov Посмотреть сообщение
При вводе:
-5
-4
-3
-2
0
Выводит:
-3
А нужно:
-2
максимум - -2, ближайший к максимуму - -3. В чем проблема?

+ сказали что код сложный, да к тому же ошибочный поэтому я его не трогаю
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 42
09.01.2019, 15:28  [ТС]
Тьфу, наоборот. Нужно -3, а выводит -2

Добавлено через 23 секунды
Тест #17
Input
-3
-2
0
Correct
-3
Output
-2
Checker
wrong answer expected -3, found -2
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
09.01.2019, 15:33
Исправленный

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
#include <algorithm>
#include <iostream>
#include <set>
 
using namespace std;
 
int main() {
  int n = 1;
 
  set<int> a;
 
  while (n != 0) {
    cin >> n;
 
    if (n != 0)
      a.insert(n);
  }
 
  auto it = a.cend();
 
  if (a.size() >= 2) {
    --it; --it;
  } else {
    --it;
  }
 
 
  cout << *it;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.01.2019, 15:38
HateLov, почему Вы не хотите просто исправить свой код из первого Вашего сообщения ? как исправить я
сообщил, если что-то осталось непонятно - спрашивайте.
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 42
09.01.2019, 16:12  [ТС]
Теперь другие тесты неправильные(

Тест #2
Input
33
32
33
0
Correct
33
Output
32
Checker
wrong answer expected 33, found 32

Тест #11
Input
-12
153
-191
-310
-357
45
25
219
-730
231
-49
161
-9
-304
155
249
18
-364
-181
92
23
-643
-427
-28
73
-651
-55
-434
-629
8
-677
-525
98
94
94
-563
-20
-701
195
121
239
34
-229
46
-309
5
157
-57
133
149
-233
-575
190
-738
-258
54
-328
-373
101
-546
87
-410
-260
-234
29
-39
24
-297
43
-593
-598
190
-187
84
-187
-767
206
207
-485
127
-569
205
1
-338
-557
-618
-667
174
54
-744
-163
-459
209
-548
156
-353
-219
13
113
-537
-424
-653
-304
-344
-470
-389
78
28
-514
48
-742
28
216
58
9
-734
-680
-283
140
77
-318
28
-331
83
249
105
57
0
Correct
249
Output
239
Checker
wrong answer expected 249, found 239

Добавлено через 19 минут
У меня в коде нет INT_MIN, поэтому я не понимаю, что мне исправлять в своём коде..

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main()
{
    signed short int max1, max2 = 0, n = 1;
    cin >> max1;
 
    do {
        cin >> n;
        if (n > max1) {
            max2 = max1;
            max1 = n;
        }
        else if (n > max2) {
            max2 = n;
        }
    } while (n != 0);
    cout << max2;
    return 0;
}
2 теста не проходит. В чём прикол???
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.01.2019, 16:13
Цитата Сообщение от HateLov Посмотреть сообщение
У меня в коде нет INT_MIN, поэтому я не понимаю, что мне исправлять в своём коде..
ещё раз:
переходите по ссылке: Найти два наибольших числа в последовательности
берёте код из сообщения №3 (от Hitoku)
подгоняете под свою задачу (меняете типы, границы и т.д.)
тестируете у себя и выкладываете сюда для проверки (если будет что-то лишнее, чтобы откорректировать)
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
09.01.2019, 16:16
Цитата Сообщение от HateLov Посмотреть сообщение
Теперь другие тесты неправильные(
не понятно что такое второй максимум

Цитата Сообщение от HateLov Посмотреть сообщение
Тест #2
Input
33
32
33
0
Correct
33
Output
32
Checker
wrong answer expected 33, found 32
Второй максимум как раз 32, а не 33, какие-то странные тесты
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.01.2019, 16:23
Цитата Сообщение от ReDoX Посмотреть сообщение
Второй максимум как раз 32, а не 33
ReDoX, не путайте ТС. второй максимум для 33 32 33 это число 33
0
0 / 0 / 0
Регистрация: 22.10.2018
Сообщений: 42
09.01.2019, 16:23  [ТС]
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int max1 = INT_MIN, max2 = INT_MIN, m, i = 1;
       cin >> m;
       while (i != m + 1) {
           int num = 0;
           while (num < 2) {
 
              cin >> num;
           }
           if (num > max1) {
               if (max1 > max2) max2 = max1;
               max1 = num;
           }
           else if (num > max2) {
               if (max2 > max1) max1 = max2;
               max2 = num;
           }
           i++;
       }
      cout << max2 << "\n";
       system("pause");
}
Как сделать, чтобы до нуля перечислялись числа?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.01.2019, 16:48
HateLov, наверное Вам ещё сложно объединить три кода и добавить требования из условия задачи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include<climits> 
using namespace std;
 
int main()
{
    short int i=0, max1=SHRT_MIN, max2=SHRT_MIN, a;
 
    while (i<=215) 
        {
        cin >>a;
        if (a==0) break;
        if (a>=max1) {max2=max1;max1=a;}        
        else if (a>max2) max2=a;
        i++;
        }
    cout <<max2<<"\n";
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2019, 16:48

Массив. Найти среди последовательности целых чисел максимум и минимум
1)Последовательность целых чисел вводится с клавиатуры до «нуля».Найдите среди них максимум и минимум и выведите на экран их сумму. ...

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

Найти наибольшее среди тех чисел второй последовательности, которые не входят в первую
Даны две последовательности по 30 чисел в каждой. Найти наибольшее среди тех чисел второй последовательности, которые не входят в первую...

Найти количество четных чисел первой последовательности и количество нечетных чисел второй
Даны две последовательности целых чисел a1, a2...a8 и b1, b2..b8. Найти количество четных чисел первой последовательности и количество...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru