Форум программистов, компьютерный форум CyberForum.ru

Определить значение второго по величине элемента в последовательности чисел - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
monstr95
0 / 0 / 0
Регистрация: 04.12.2012
Сообщений: 14
04.12.2012, 12:15     Определить значение второго по величине элемента в последовательности чисел #1
Дана последовательность натуральных чисел (одно число в строке), завершающаяся числом 0. Определите значение второго по величине элемента в
этой последовательности, то есть элемента, который будет наибольшим, если из последовательности удалить наибольший элемент.
В этой задаче нельзя использовать глобальные переменные. Функция получает данные, считывая их с клавиатуры, а не получая их в виде параметра. Гарантируется, что последовательность содержит хотя бы два числа (кроме нуля). Ввод Вывод
1
7
9
0 7
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 12:15     Определить значение второго по величине элемента в последовательности чисел
Посмотрите здесь:

C++ определить номер наименьшего по абсолютной величине элемента массива
Найти значение 3-го по величине элемента и значения всех элементов массива, которые его превышают, заменить на найденное значение C++
Найти значение 3-го по величине элемента и значение всех элементов массива, которые его превышают, заменить на найденное значение C++
Поиск максимального и второго по величине элемента в матрице C++
найти значение третьего по величине элемента массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
04.12.2012, 12:49     Определить значение второго по величине элемента в последовательности чисел #2
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
#include<iostream>
using namespace std;
int main()
{
    int t=1, a, b;
    cin>>a>>b;
    if(b>a)
    {
        t=a; a=b; b=t;
    }
    while(t!=0)
    {
        cin>>t;
        if(t>=a)
        {
            b=a; a=t;
        }
        else
        if(t>b)
            b=t;
    }
    cout<<b;   
     return 0;
}
monstr95
0 / 0 / 0
Регистрация: 04.12.2012
Сообщений: 14
04.12.2012, 17:18  [ТС]     Определить значение второго по величине элемента в последовательности чисел #3
спасибо большое

Добавлено через 4 часа 25 минут
ребят извените я не множко ошибся а как эта задача будет выглядить не используя операторы цикла
JeiQ
0 / 0 / 0
Регистрация: 09.08.2015
Сообщений: 3
17.08.2015, 11:38     Определить значение второго по величине элемента в последовательности чисел #4
valeriikozlov, а если взять отрицательные числа?
Должно быть так:
входные данные
-1
-2
0
выходные данные
-2

А у вас выйдет так:
входные данные
-1
-2
0
выходные данные
-1

А вот мой код:
C++ (Qt)
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 <iostream>
using namespace std;
int main()
{
    int max1,max2;
    int i;
    cin >> i;
    max1=i;
    cin >> i;
    max2=i;
        if (max2>max1)
            {
        max2=max1;
        max1=i;
            };
    while(i!=0)
    {
        cin >> i;
        if(i!=0)
        {
            if (i> max1)
            {
                max2=max1;
                max1=i;
            }
            else
                if (i> max2)
                max2=i;
        }
    }
    cout << max2;
    system("pause");
}
monstr95, эта задача без операторов цикла не решаема.
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
18.08.2015, 04:09     Определить значение второго по величине элемента в последовательности чисел #5
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
#include <algorithm>
#include <iostream>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector     < int   >   T_numbers;
/////////////////////////////////////////////////////////////////////////////////////////
void    input_numbers_and_print_premaximal_element()
{
    T_numbers   numbers;
    int         cur_val     =   0;
 
    std::cout   <<  std::endl
                <<  "-> ";
 
    while   (
                    std::cin    >>  cur_val
                &&  cur_val
            )
    {
        numbers.push_back( cur_val );
    }
 
    auto    premax_it   =       numbers.end()
                            -   2;
 
    std::nth_element
        (
            numbers.begin   (),
            premax_it,
            numbers.end     ()
        );
 
    std::cout   <<  *premax_it
                <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        input_numbers_and_print_premaximal_element();
    }
}
_Ivana
2188 / 1393 / 124
Регистрация: 01.03.2013
Сообщений: 4,146
Записей в блоге: 2
18.08.2015, 05:01     Определить значение второго по величине элемента в последовательности чисел #6
Цитата Сообщение от JeiQ Посмотреть сообщение
эта задача без операторов цикла не решаема.
Конечно же это большое заблуждение (не считая того, что некропост). Откройте для себя свободу от операторов цикла.
C++
1
2
3
4
5
6
#include<iostream>
using namespace std;
 
int f(int a, int b) {int t; cin>>t; return t ? (t>=a ? f(t,a) : (t>b ? f(a,t) : f(a,b))) : b;}
 
int main() {int a, b; cin>>a>>b; cout << (a>=b ? f(a,b) : f(b,a)) << endl; return 0;}
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
18.08.2015, 08:29     Определить значение второго по величине элемента в последовательности чисел #7
Цитата Сообщение от _Ivana Посмотреть сообщение
Конечно же это большое заблуждение
так как по заданию
Цитата Сообщение от monstr95 Посмотреть сообщение
Функция получает данные, считывая их с клавиатуры, а не получая их в виде параметра
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 <algorithm>
#include <iostream>
#include <queue>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::priority_queue     < int   >   T_numbers_prior_queue;
/////////////////////////////////////////////////////////////////////////////////////////
void     f()
{
    static  int                     num     =   1;
    static  T_numbers_prior_queue   numbers_prior_queue;
 
    if( num )
    {
        std::cin    >>  num;
        numbers_prior_queue.push( num );
        f();
    }
    else
    {
        numbers_prior_queue.pop();
        num     =   numbers_prior_queue.top();
 
        std::swap
            (
                numbers_prior_queue,
                T_numbers_prior_queue()
            );
 
        std::cout   <<  num
                    <<  std::endl
                    <<  std::endl;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        f();
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2015, 08:33     Определить значение второго по величине элемента в последовательности чисел
Еще ссылки по теме:

C++ Цикл while: Определить значение второго по величине элемента в этой последовательности
Определить наибольшее значение в последовательности введенных чисел C++
C++ Найти значение и индексы максимального по абсолютной величине элемента матрицы

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

Или воспользуйтесь поиском по форуму:
_Ivana
2188 / 1393 / 124
Регистрация: 01.03.2013
Сообщений: 4,146
Записей в блоге: 2
18.08.2015, 08:33     Определить значение второго по величине элемента в последовательности чисел #8
У меня в каком-то смысле так и есть, как написано в задании. Если кому этого смысла недостаточно, могут обернуть вызов во внешнюю функцию - без параметров.
Yandex
Объявления
18.08.2015, 08:33     Определить значение второго по величине элемента в последовательности чисел
Ответ Создать тему
Опции темы

Текущее время: 16:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru