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

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

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

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

16.10.2012, 18:40. Просмотров 2266. Ответов 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++ Два максимальных значения из 10 целых чисел
C++ Найти 10 максимальных элементов в массиве
C++ Функция, находящая два максимальных числа в массиве и возвращающая структуру с этими числами
C++ В одномерном массиве найти два максимальных элемента и удалить все элементы между ними
Последовательность целых чисел. Найти два минимальных / два максимальных элемента C++
C++ Найти два первых элемента в массиве, значения которых не попадают в заданный диапазон
C++ Найти два максимальных числа из потока
C++ В чем ошибка? В массиве целых чисел найти количество максимальных элементов
В массиве целых чисел найти n максимальных элементов C++
Найти r максимальных в массиве C++
Найти два максимальных элемента из интервала C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1636 / 1264 / 129
Регистрация: 21.12.2010
Сообщений: 1,925
Записей в блоге: 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
Эксперт С++
5096 / 1534 / 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;
}
xtorne21st
интересующийся
300 / 271 / 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