40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
|
||||||
1 | ||||||
Поиск 2-х наибольших чисел31.03.2010, 20:31. Просмотров 9451. Ответов 29
Метки нет Все метки)
(
Всем привет))) Вопрос вот в чём: подскажите как найти 2 наибольших числа из 10...массивами пользоваться нельзя)))) Ну первое число это просто...это я сделал...вот не могу вспомнить как вывести 2-е....можете не писать сам код, а просто навести на путь истинный)))
![]() вот пример нахождения самого наибольшего
0
|
|
31.03.2010, 20:31 | |
Задача на поиск 2х наибольших чисел
Определть сумму трех наибольших чисел в последовательности из N чисел. |
|
33 / 33 / 11
Регистрация: 25.03.2010
Сообщений: 45
|
||||||
31.03.2010, 21:14 | 2 | |||||
![]() Решение
много раз не тестил, то вроде похоже на правду
4
|
40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
|
|
31.03.2010, 21:18 [ТС] | 3 |
Спасибо! Тема закрыта
![]()
0
|
4 / 4 / 4
Регистрация: 14.12.2009
Сообщений: 17
|
||||||
31.03.2010, 21:18 | 4 | |||||
1
|
0 / 0 / 1
Регистрация: 01.08.2011
Сообщений: 20
|
||||||
01.08.2011, 23:16 | 5 | |||||
От себя добавлю.Наибольшему и второму присваивается значение первого вводимого числа. Строчки 6-11 - на случай отрицательных чисел.
0
|
ниначмуроФ
846 / 530 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
|
||||||
01.08.2011, 23:31 | 6 | |||||
0
|
847 / 189 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
||||||
01.08.2011, 23:32 | 7 | |||||
0
|
Заблокирован
|
|
01.08.2011, 23:54 | 8 |
У вас ошибка в коде, так как если последовательность чисел имеет всего лишь один максимальный элемент, то у вас получится неправильный ответ, так как ваши два максимальных элемента будут иметь разные значения. Более того если сформулировать задачу корректнее, то есть найти позиции двух максимальных элементов, то ваш код с этой задачей не справится, так как вы перемешали исходную последовательность. Кроме того, если вы используете средства С++, то почему бы не использовать алгоритмы?
1
|
Freelance
![]() 2875 / 1810 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
|
01.08.2011, 23:58 | 9 |
1
|
ниначмуроФ
846 / 530 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
|
|
02.08.2011, 00:00 | 10 |
это только пример, без учета сколько в массиве элементов, 0 или 1 или больше.
как сформулирована так сформулирована
0
|
Заблокирован
|
||||||
02.08.2011, 00:12 | 11 | |||||
Во-первых, я бы хотел отметить, что предложенные в начале варианты страдают "детской болезнью", когда начальным значениям максимумов присвоены нули. Так как рассматривается последовательность целых чисел, то вполне возможно, что все члены последовательности будут отрицательными, а тогда значение 0 для максимумов очевидно будет неверным.
Во-вторых, задачу следует переформулировать более корректно, то есть найти номера членов последовательности для двух максимальных элементов. Вообще-то, здача решается очень просто! Нужно для первого максимума использовать строгое неравенство при сравнении максимума и очередного элемента. А для второго максимума использовать не строгое неравенство. То есть для первого максимума max1 использовать конструкцию if ( max1 < element ) max1 = element; А для второго максимума max2 использовать конструкцию if ( max2 <= element ) max2 = element; Тогда будет найден первый максимум в последовательности и последний максимум в последовательности. ![]() Если писать свой алгоритм, то для первого максимума можно использовать стандартный предикат std::less, а для второго std::less_equal. Прототип шаблона собственного алгоритма для этих целей может выглядеть так template <typename InputIterator> std: ![]() two_max( InputIterator first, InputIterator last ); Добавлено через 2 минуты Во-первых, я бы хотел отметить, что предложенные в начале варианты страдают "детской болезнью", когда начальным значениям максимумов присвоены нули. Так как рассматривается последовательность целых чисел, то вполне возможно, что все члены последовательности будут отрицательными, а тогда значение 0 для максимумов очевидно будет неверным. Во-вторых, задачу следует переформулировать более корректно, то есть найти номера членов последовательности для двух максимальных элементов. Вообще-то, здача решается очень просто! Нужно для первого максимума использовать строгое неравенство при сравнении максимума и очередного элемента. А для второго максимума использовать не строгое неравенство. То есть для первого максимума max1 использовать конструкцию if ( max1 < element ) max1 = element; А для второго максимума max2 использовать конструкцию if ( max2 <= element ) max2 = element; Тогда будет найден первый максимум в последовательности и последний максимум в последовательности. ![]() Если писать свой алгоритм, то для первого максимума можно использовать стандартный предикат std::less, а для второго std::less_equal. Прототип шаблона собственного алгоритма для этих целей может выглядеть так template <typename InputIterator>
2
|
0 / 0 / 1
Регистрация: 01.08.2011
Сообщений: 20
|
|
02.08.2011, 00:46 | 12 |
С/С++ для начинающих В данном разделе "детская болезнь" уместна
На такую простую задачу столько батек сбежалось. Даёшь рабочий код!
0
|
847 / 189 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
02.08.2011, 07:10 | 14 |
Четко сформулируйте задачу. А уж решить ее не составит НИКАКИХ проблем для АБСОЛЮТНО любого случая поиска двух максимальных элементов.
0
|
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 10
|
|
03.08.2011, 14:03 | 15 |
......
0
|
0 / 0 / 1
Регистрация: 01.08.2011
Сообщений: 20
|
||||||
03.08.2011, 14:31 | 16 | |||||
Frenk-kobalt,
В 5 посте ищи полный код.
num - число,naib - наибольшее, wtor - второе.
0
|
Заблокирован
![]() |
|
04.08.2011, 10:22 | 17 |
А если речь будет идти скажем о температурах за день в течении января где нибудь на камчатке, и мы сравниваем -50 с нулём, что будет на выходе???Наверное 0, да?В то время как температуры будут -40 в среднем, такие начальные приблежения не верны...
0
|
847 / 189 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
||||||
04.08.2011, 11:08 | 18 | |||||
Типичная ошибка новичков. А потом удивляются почему программа неправильно работает.
Добавлено через 39 минут Если массивами пользоваться нельзя, то вот вариант с последовательностью. Вводим произвольное количество элементов до первого 0 (вместо 0 можно другой модификатор конца поставить). В итоге, печатаются 2 различных! максимальных элемента.
1
|
Заблокирован
![]() |
||||||
04.08.2011, 11:22 | 19 | |||||
- тоже не верно
Не следует приравнивать величину ничему не принадлежащему введенной последовательности, а если задача на минимум будет тогда INT_MAX?А если мне нужен сам диапазон введенных величин, нижняя и верхняя границы???
0
|
847 / 189 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
04.08.2011, 12:02 | 20 |
Понимаете в чем тут дело. Если в задаче найти два различных максимальных элемента, например из чисел 5, 5, 4, 4, 1, то при инициализации max1 = x; max2 = x; Вы второе максимальное значение (4) не сможете найти. Так тоже не пойдет.
0
|
04.08.2011, 12:02 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Нахождение суммы трех наибольших чисел в наборе из 7 чисел Поиск наименьших, наибольших из 10 элементов. матрица и поиск наибольших элементов
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |