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

Найти два максимальных числа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.07.2010, 01:46     Найти два максимальных числа #1
Задача впринципе легкая, но меня что-то зациклило по полной. Найти два максимальных числа из 10 введенных. БЕЗ массива. Одинаковое число может быть введено только ОДИН раз. Следовательно цикл может быть только один. Можно конечно наверное заводить под каждое введенное значение новую переменную... Но есть ли резон в этом? Кто может помогите плз. Вот код ищет максимальное число.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Находит максимальное число из 10 заданных
 
#include <iostream>
 
int main()
{
    int Number=0, max=0;
    for(int i=0;i<10;i++)
    {
        std::cout<<"Enter number: ";
        std::cin>>Number;
        if(Number>max)
            max=Number;
    }
    std::cout<<"Max: "<< max <<'\n';
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2010, 01:46     Найти два максимальных числа
Посмотрите здесь:

C++ найти два максимальных значения в массиве
Два двузначных числа, записанных подряд, образуют четырехзначное число, которое нацело делится на их произведение. Найти все такие числа C++
C++ Два максимальных числа
C++ Функция, находящая два максимальных числа в массиве и возвращающая структуру с этими числами
C++ Массив A содержит только два одинаковых числа. Найти эти числа и указать их индексы ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.07.2010, 01:50     Найти два максимальных числа #2
Без массива не отследишь вводилась уже это значение или нет (если оно конечно не равно максимальному). Как мне кажется.
Если только в файл писать

Ну а если это не имеет значения, то в принципе ничего страшного, сейчас набросаю.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.07.2010, 01:55  [ТС]     Найти два максимальных числа #3
fasked, Имеет... С массивом примерно знаю как делать) А вот без массива - фигушки. Просто в Дейтелах есть эта задача. Причем там еще массивы не проходились по сценарию книги. Оп. Я понял про что ты) Без массива можешь поиск двух макс элементов?) Только чтобы они не были равны)

Добавлено через 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
25
//Находит максимальное число из 10 заданных
 
#include <iostream>
 
int main()
{
    int Number[10], max=0, max2=0;
    for(int i=0;i<10;i++)
    {
        std::cout<<"Enter number: ";
        std::cin>>Number[i];
        if(Number[i]>max)
            max=Number[i];
    }
    for(int i=0;i<10;i++)
    {
        if(Number[i]!=max)
            if(Number[i]>max2)
                max2=Number[i];
    }
 
    std::cout<<"Max: "<< max <<'\n';
    std::cout<<"Max2: "<< max2 <<'\n';
    return 0;
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.07.2010, 01:56     Найти два максимальных числа #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
#include <iostream>
 
int main()
{
    int in = 0, max1 = 0, max2 = 0;
 
    for(int i = 0; i < 10; ++i)
    {
        std::cout << "> ";
        std::cin >> in;
        
        if(in == max1 || in == max2)
        {
            std::cout << "ERROR" << std::endl;
        }
 
        else if(in > max1)
        {
            max1 = in;
 
            if(max1 > max2)
                std::swap(max1, max2);
        }
    }
 
    std::cout << "max1: " << max1 << std::endl;
    std::cout << "max2: " << max2 << std::endl;
 
    system("PAUSE");
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.07.2010, 02:00  [ТС]     Найти два максимальных числа #5
fasked, Красиво, но сие опять же не предполагается. Изучены должны быть только первые две главы. То есть ничего существенного кроме ввода/вывода, циклов, условий.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.07.2010, 02:03     Найти два максимальных числа #6
Цитата Сообщение от Lavroff Посмотреть сообщение
Красиво, но сие опять же не предполагается. Изучены должны быть только первые две главы. То есть ничего существенного кроме ввода/вывода, циклов, условий.
так тут ничего больше и нет, std::swap можно ручками расписать:
C++
1
2
3
in = max1;
max1 = max2;
max2 = in;
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.07.2010, 02:04  [ТС]     Найти два максимальных числа #7
fasked, Да действительно. Ступил. Спасибо)
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.07.2010, 02:05     Найти два максимальных числа #8
Только вот полной проверки на повторы это все равно не даст.
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
28.07.2010, 02:36     Найти два максимальных числа #9
fasked, в начальной момент max1, max2 сразу получили значение 0, поэтому если все введенные числа отрицательны то неправильный ответ получится.
Думаю лучше присваивать им значение первого числа, которое ползователь вводит.
Ну вот у меня такой вариант.
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
#include <iostream>
using namespace std;
 
int main()
{
    int in, max1, max2;
 
    cout << "> ";
    cin >> in;
 
    max1 = max2 = in;
 
    for( int i = 1; i < 10; i++ )
    {
        cout << "> ";
        cin >> in;
 
        if ( in > max1 )
        {
            max2 = max1;
            max1 = in;
        }
        else
            if ( in < max1 && ( in > max2 || max2 == max1 ) )
                    max2 = in;
    }
 
    cout << "max1 : " << max1 << endl
         << "max2 : " << max2 << endl;
 
    system("PAUSE");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2010, 02:44     Найти два максимальных числа
Еще ссылки по теме:

C++ В одномерном массиве найти два максимальных элемента и удалить все элементы между ними
Последовательность целых чисел. Найти два минимальных / два максимальных элемента C++
C++ Найти два максимальных числа из потока

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.07.2010, 02:44     Найти два максимальных числа #10
Цитата Сообщение от pannaruto Посмотреть сообщение
в начальной момент max1, max2 сразу получили значение 0, поэтому если все введенные числа отрицательны то неправильный ответ получится.
Думаю лучше присваивать им значение первого числа, которое ползователь вводит.
да-да, все верно
Yandex
Объявления
28.07.2010, 02:44     Найти два максимальных числа
Ответ Создать тему
Опции темы

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