Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.76
Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
#1

Поиск 2-х наибольших чисел - C++

31.03.2010, 20:31. Просмотров 5007. Ответов 29
Метки нет (Все метки)

Всем привет))) Вопрос вот в чём: подскажите как найти 2 наибольших числа из 10...массивами пользоваться нельзя)))) Ну первое число это просто...это я сделал...вот не могу вспомнить как вывести 2-е....можете не писать сам код, а просто навести на путь истинный)))

вот пример нахождения самого наибольшего

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int _tmain(int argc, _tchar* argv[])
{
    setlocale(lc_all,"russian");
 
    int counter = 0;
    int number;
    int largest = 0;
 
    while (counter < 10)
    {
        cout << "введите объём продаж ";
        cin >> number;
        if(number > largest)
            largest = number;
        counter ++;
    }
    cout << "наибольший объём продаж = " << largest << endl;
    return 0; 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2010, 20:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск 2-х наибольших чисел (C++):

Задача на поиск 2х наибольших чисел - C++
Попалась задачка с ныне мне не встречавшейся переменной tmp. Единственное, что я нашла в интернете, так это то, что tmp создают для...

Найти 10 наибольших чисел в массиве из 10000 чисел и записать в массив - C++
Есть массив положительных чисел (значение каждого числа не превышает 3000). Найти 10 наибольших чисел и записать в массив arr. ...

Поиск в массиве: найти 5 наибольших элементов - C++
Есть массив чисел, в нем найти 5 крупнейших чисел и вывести на экран. Вот мой код, но он не работает правильно, когда вместо 100 написать...

сумма 5 наибольших чисел - C++
люди помагите пожалуйста я ни как не могу ввести 25 чисел с экрана в статическую память.Найти сумму 5 наибольших чисел. Вывести их и...

Сумма двух наибольших чисел последовательности. - C++
Здравствуйте, уважаемые. Прошу Вас, помочь мне разобраться в коде программы. Или упростить алгоритм решения. Задание:Вводится...

Найти сумму 2 наибольших из трех чисел - C++
1) Даны 3 целых числа. Найти сумму 2 наибольших из них. 2)дана структура данных из 5 названий цветочных растений цветок -название ...

29
mousebc103
0 / 0 / 1
Регистрация: 01.08.2011
Сообщений: 20
03.08.2011, 14:31 #16
Frenk-kobalt,
В 5 посте ищи полный код.
C
1
2
3
4
5
6
7
8
9
if (num>wtor)
      {
                   wtor=num;
                   if(num>naib)
                   {
                               wtor=naib;
                               naib=num;
                               }
                               }
Это для 2х наибольших.Для двух наименьших делается аналогично.
num - число,naib - наибольшее, wtor - второе.
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 10:22 #17
Цитата Сообщение от EvilSlipp3r Посмотреть сообщение
int largest = 0;
* * * * int largest2 = 0;
А если речь будет идти скажем о температурах за день в течении января где нибудь на камчатке, и мы сравниваем -50 с нулём, что будет на выходе???Наверное 0, да?В то время как температуры будут -40 в среднем, такие начальные приблежения не верны...
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
04.08.2011, 11:08 #18
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
А если речь будет идти скажем о температурах за день в течении января где нибудь на камчатке, и мы сравниваем -50 с нулём, что будет на выходе???Наверное 0, да?В то время как температуры будут -40 в среднем, такие начальные приблежения не верны...
Типичная ошибка новичков. А потом удивляются почему программа неправильно работает.

Добавлено через 39 минут
Если массивами пользоваться нельзя, то вот вариант с последовательностью. Вводим произвольное количество элементов до первого 0 (вместо 0 можно другой модификатор конца поставить). В итоге, печатаются 2 различных! максимальных элемента.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<limits.h>
 
int main()
{
   int x, max1, max2;
   scanf("%d", &x);
   max1=max2=INT_MIN;
   while (x)
   {
     if (x > max1)
     {
         max2 = max1;
         max1 = x;
     }
      else if (x > max2 && x < max1)
         max2 = x;
      scanf("%d", &x);
   }
   printf("max1 = %d, max2 = %d\n", max1, max2);
   return 0;
}
1
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 11:22 #19
Цитата Сообщение от Olga_ Посмотреть сообщение
int x, max1, max2;
* *scanf("%d", &x);
* *max1=max2=INT_MIN;
- тоже не верно
Не следует приравнивать величину ничему не принадлежащему введенной последовательности, а если задача на минимум будет тогда INT_MAX?А если мне нужен сам диапазон введенных величин, нижняя и верхняя границы???
C++
1
2
3
int x, max1, max2;
scanf("%d", &x);
max1 = x; max2 = x;
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
04.08.2011, 12:02 #20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- тоже не верно
Не следует приравнивать величину ничему не принадлежащему введенной последовательности, а если задача на минимум будет тогда INT_MAX?А если мне нужен сам диапазон введенных величин, нижняя и верхняя границы???
C++
1
2
3
int x, max1, max2;
scanf("%d", &x);
max1 = x; max2 = x;
Понимаете в чем тут дело. Если в задаче найти два различных максимальных элемента, например из чисел 5, 5, 4, 4, 1, то при инициализации max1 = x; max2 = x; Вы второе максимальное значение (4) не сможете найти. Так тоже не пойдет.
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 12:11 #21
Цитата Сообщение от Olga_ Посмотреть сообщение
два различных максимальных
- максимальный элемент 1 или несколько с таким же значением, элемент с другим значением уже не будет максимальным, если нужно найти максимальный элемент и самый близкий к нему это другой алгоритм!
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
04.08.2011, 12:20 #22
часто в задачах надо найти именно два максимальных элемента, а именно,максимальный и максимальный из множества без учета того максимального. Понятно, что максимальный один. Вы просто свели задачу к количеству повторений максимального элемента, это другая задача.

Вы проанализируйте, алгоритм в посте 18 - лучший вариант. Если в результате программа выведет INT_MIN, значит пользователь все значения одинаковые вводил (INT_MIN) и т.д. Так как массивом нельзя пользоваться, то это хороший вариант.

Добавлено через 6 минут
Поэтому данная задача нуждается в четкой формулировке. Либо найти максимальный и второй по величине максимальный, то это один алгоритм, либо найти количество максимальных элементов, либо найти все номера максимальных элементов и т.д.
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 12:36 #23
Цитата Сообщение от Olga_ Посмотреть сообщение
часто в задачах надо найти именно два максимальных элемента, а именно,максимальный и максимальный из множества без учета того максимального.
Вот алгоритм реализующий данную логику
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 <stdio.h>
#include <conio.h>
 
int main()
{
    int x, max1, max2;
    int nCount = 0;
    while(nCount < 10)
    {
        printf("Enter %d number\r\n", nCount + 1);
        scanf("%d",&x);
        if(nCount == 0)
        {
            max1 = x;
            max2 = x;
        }
        if(max1 < x)
        {
            max2 = max1;
            max1 = x;
        }
        else
            if(max1 == max2)
                max2 = x;
        if(max2 < x && x != max1)
            max2 = x;
        nCount++;
    }
    printf("MAX1 %d\r\n",max1);
    printf("MAX2 %d\r\n",max2);
    printf("Press any key to continue");
    getch();
    return 0;
}
0
Миниатюры
Поиск 2-х наибольших чисел  
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 12:43 #24
Чтобы снять все вопроссы привожу скриншот крайне неблагопрятного ввода - ввожу подряд несколько одинаковых причём наперёд уже максимальных элементов. Вся соль алгоритма вот в этих условиях
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(nCount == 0)
        {
            max1 = x;
            max2 = x;
        }
        if(max1 < x)
        {
            max2 = max1;
            max1 = x;
        }
        else
            if(max1 == max2)
                max2 = x;
        if(max2 < x && x != max1)
            max2 = x;
0
Миниатюры
Поиск 2-х наибольших чисел  
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
04.08.2011, 12:43 #25
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот алгоритм реализующий данную логику
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 <stdio.h>
#include <conio.h>
 
int main()
{
    int x, max1, max2;
    int nCount = 0;
    while(nCount < 10)
    {
        printf("Enter %d number\r\n", nCount + 1);
        scanf("%d",&x);
        if(nCount == 0)
        {
            max1 = x;
            max2 = x;
        }
        if(max1 < x)
        {
            max2 = max1;
            max1 = x;
        }
        else
            if(max1 == max2)
                max2 = x;
        if(max2 < x && x != max1)
            max2 = x;
        nCount++;
    }
    printf("MAX1 %d\r\n",max1);
    printf("MAX2 %d\r\n",max2);
    printf("Press any key to continue");
    getch();
    return 0;
}
Не работает для всех данных, попробуйте 5, 5, 4, 1,...,1 и по убывающей... Результат будет 5 и 5 -не верно.
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 12:50 #26
Цитата Сообщение от Olga_ Посмотреть сообщение
Не работает для всех данных, попробуйте 5, 5, 4, 1,...,1 и по убывающей... Результат будет 5 и 5 -не верно.
Возможно у вас что то с компилятором или руки не из того места, вот мой ввод и скриншот работы
0
Миниатюры
Поиск 2-х наибольших чисел  
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 12:51 #27
Ещё раз скомпилируй код
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 <stdio.h>
#include <conio.h>
 
int main()
{
    int x, max1, max2;
    int nCount = 0;
    while(nCount < 10)
    {
        printf("Enter %d number\r\n", nCount + 1);
        scanf("%d",&x);
        if(nCount == 0)
        {
            max1 = x;
            max2 = x;
        }
        if(max1 < x)
        {
            max2 = max1;
            max1 = x;
        }
        else
            if(max1 == max2)
                max2 = x;
        if(max2 < x && x != max1)
            max2 = x;
        nCount++;
    }
    printf("MAX1 %d\r\n",max1);
    printf("MAX2 %d\r\n",max2);
    printf("Press any key to continue");
    getch();
    return 0;
}
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
04.08.2011, 12:59 #28
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
int main()
{
   int i, x, max1, max2, flag;
   flag = i = 0;
   scanf("%d", &x);
   i++;
   max1 = x;
   while (i < 10)
   {
      if (x > max1)
      {
         max2 = max1;
         max1 = x;
      }
      else if (x < max1 && !flag)
      {
         flag = 1;
         max2 = x;
      }
      else if (x > max2 && x < max1)
         max2 = x;
      scanf("%d", &x);
      i++;
   }
   printf("max1 = %d, max2 = %d\n", max1, max2);
   getchar();
   return 0;
}
Добавлено через 6 минут
Вариантов можно кучу придумать, все от задачи зависит. Пусть кому надо выбирают алгоритм по душе.
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 13:00 #29
Цитата Сообщение от Olga_ Посмотреть сообщение
Не работает для всех данных, попробуйте 5, 5, 4, 1,...,1 и по убывающей... Результат будет 5 и 5 -не верно.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ещё раз скомпилируй код
- Ну так что??!
Вводя флаг о максимальной величине - увеличиваем число переменных
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
04.08.2011, 13:01 #30
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- Ну так что??!
Вводя флаг о максимальной величине - увеличиваем число переменных
Зато у меня проверок меньше, а на 4 байта памяти не убудет.
Так что, 2 алгоритма рабочие?
0
04.08.2011, 13:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2011, 13:01
Привет! Вот еще темы с ответами:

Найти произведение двух наибольших отрицательных чисел массива - C++
Найти произведение двух наибольших отрицательных чисел массива help pls, вечно беда получается какая-то.. #include&lt;iostream&gt; using...

Нахождение суммы двух наибольших из трех различных чисел - C++
Как это сделать?

Найти произведение двух наибольших четных чисел массива - C++
Найти произведение двух наибольших четных чисел массива

Из трёх заданных чисел найти сумму двух наибольших - C++
Данные три числа. Найти сумму двух наибольших из них.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru