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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

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

16.10.2012, 18:40. Просмотров 2469. Ответов 3
Метки нет (Все метки)

Собственно, не получается реализовать нахождение второго максимального значения:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Найдти 2 максимальных значения без сортировки массива и
// и дополнительных элементов (контейнеры и доплнительные массивы).
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
  cout << "Программа запрашивает у пользователя ввести количество\n"
       << "челочисленных элементов в массиве. Присваивает им\n"
       << "произвольное значение. И находит 2 самых больших элемента.\n"
       << endl;
 
  size_t N = 0;
  cout << "Введите, подалуйста, количество элементов (от 2 до 1000): ";
  cin >> N;
  while (  N < 2 || N > 1000 ) {
    cout << "Количество элементов не входит в диапазон значений.\n";
    cout << "Введите, подалуйста, количество элементов"
     << "(от 2 до 1000): ";
    cin >> N;
  }
 
  // Заполним массив произвольными значениями и отобразим результат
  int arr[N];
  for ( int *p = arr; p != arr + N; ++p ) {
    *p = rand();
    cout << *p << "\n";
  }
  cout << endl;
 
  // найдём максимальное значение
  int *max_val1 = arr;
  for ( int *ptr = arr + 1; ptr != arr + N; ++ptr )
    if ( *max_val1 < *ptr )
      max_val1 = ptr;
 
  //*** ДО ЭТОГО МОМЕНТА РЕЗУЛЬТАТ ПРОГРАММЫ УДОВЛЕТВОРЯЕТ УСЛОВИЕ ***
  // попытка найти наибольшее значение но меньше максимального
  int *max_val2 = arr;
  for ( int *ptr = arr + 1; ptr != arr + N; ++ptr )
    if ( *max_val2 < *ptr ) {
      if ( max_val2 == max_val1 ) continue; /* проверим, не равны ли
                           указатели и если равны,
                           перейти к следующей 
                           итерации цикла for */
      else max_val2 = ptr;
    }
 
  // отбразим результат поиска
  cout << *max_val1 << "\n"
       << *max_val2 << endl;
 
 
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2012, 18:40     найти два максимальных значения в массиве
Посмотрите здесь:

В одномерном массиве найти два максимальных элемента и удалить все элементы между ними - C++
Дана задача : В одномерном массиве найти два максимальных элемента и удалить все элементы между ними. Массив задается случайным образом. ...

Последовательность целых чисел. Найти два минимальных / два максимальных элемента - C++
Дана последовательность целых чисел a1,a2,...,an, где n=&gt; 3. Найти: а) два максимальных элемента последовательности; б) два минимальных...

Два максимальных значения из 10 целых чисел - C++
Найдите два наибольших значения из 10 чисел. .

Найти два первых элемента в массиве, значения которых не попадают в заданный диапазон - C++
Здравствуйте. Помогите с работой в c++ массивы. 1. Найти два первых элемента в массиве С(17), значения которых не попадают в заданный с...

Функция, находящая два максимальных числа в массиве и возвращающая структуру с этими числами - C++
Напишите функцию, находящую два максимальных числа в массиве и возвращающую структуру с этими числами и подробно расписать код.

Найти два максимальных числа - C++
Задача впринципе легкая, но меня что-то зациклило по полной. Найти два максимальных числа из 10 введенных. БЕЗ массива. Одинаковое число...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1643 / 1271 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
16.10.2012, 20:47     найти два максимальных значения в массиве #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
26
27
28
#include <iostream>
#include <algorithm>
#include <climits>
 
int main()
{
    int arr[] = {3, -5, 8, 8};
    size_t const size = sizeof(arr) / sizeof(*arr);
    // первый максимум
    int max1 = *std::max_element(std::begin(arr), std::end(arr));
    // поиск второго
    int max2 = INT_MIN;
    bool found = false;
    for(size_t i = 0; i < size; ++i)
    {
        if((arr[i] != max1) && (arr[i] >= max2))
        {
            max2 = arr[i];
            found = true;
        }
    }
    std::cout << "max1: " << max1 << std::endl;
    if(found)
    {
        std::cout << "max2: " << max2 << std::endl;
    }
    return 0;
}
Ev[G]eN
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
16.10.2012, 21:06     найти два максимальных значения в массиве #3
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main()
{
    srand(time(0));
    
    int Size = 0;
    std::cout << "Size: ";
    std::cin >> Size;
    
    int *Array = new int [Size];
    int firstMax = 0, secondMax = 0;
    
    std::cout << "Array: " << std::endl;
    for(int i = 0; i < Size; i++)
    {
            std::cout << (Array[i] = rand() % 50) << " ";
            if(Array[i] > Array[firstMax])
                        firstMax = i;
            if((Array[i] > Array[secondMax]) && (Array[i] != Array[firstMax]))
                         secondMax = i;
    }
    std::cout << "\nFirst max: " << Array[firstMax] << "; Second max: " << Array[secondMax];
    std::cout << std::endl;
    delete [] Array;
    
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 21:54     найти два максимальных значения в массиве
Еще ссылки по теме:

Найти два максимальных элемента из интервала - C++
Даны числа a, b (0 &lt; a &lt; b) и набор из десяти элементов. Найти минимальный1|максимальный2 из элементов, содержащихся в интервале (a, b)....

Найти два максимальных числа из потока - C++
Здравствуйте, нужна ваша помощь. Нужно найти два максимальных числа из одного файла и записать их в другой файл. Сделала так, а опыта и...

Найти r максимальных в массиве - C++
Надо найти определенное число максимальных эл-тов в массиве. Не могу найти ошибки поиске (и в других частях, если есть). Помогите :help: ...

Найти 10 максимальных элементов в массиве - C++
Подскажите пожалуйста, как найти 10 максимальных элементов в массиве? Неужели нужно объявлять 10 переменных и в них записывать значения???...

В массиве целых чисел найти n максимальных элементов - C++
Как массиве целых чисел размером size найти n максимальных? Добавлено через 1 минуту массив не изменять

В чем ошибка? В массиве целых чисел найти количество максимальных элементов - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #define N 16 #define A 0 #define B 5 void Init(int *a, int n) { ...


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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
16.10.2012, 21:54  [ТС]     найти два максимальных значения в массиве #4
Я вот не пойму, почему в моём примере не проходит проверка на равенство указателей? В результате у меня получаются в обоих случаях одинаковый результат - максимальное значение. Хотя по идее, при второй переборке массива максимальное значение первой переборке должно игнорироваться.
Yandex
Объявления
16.10.2012, 21:54     найти два максимальных значения в массиве
Ответ Создать тему
Опции темы

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