![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Master_ |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Есть одномерный массив n размерности.
Есть int k=количеству чисел, которые составляют максимальное произведение. Пример:
Считает в принципе правильно, НО... как быть с отрицательными числами? Например:
По моему алгоритму находятся просто k максимальных чисел, потом они умножаются. Но ведь в примере выше получается, что максимальное произведение будет = -2*-4*5=40, а не 15... Пока не могу додуматься до алгоритма... Исходник прилагается:
Это сообщение отредактировал(а) Master_ - 7.4.2009, 16:41 |
||||||
|
|||||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Master_, Используя векторы, не разумно использовать индексы. Используй итераторы.
Собственно вопроса не понял...? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
чисел 4 ввести надо, а вводишь 5 |
|||
|
||||
| Master_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
У меня программа будет правильно работать только для положительных чисел, так как просто выбирает три максимальных числа.
Но ведь если два отрицательных числа умножить друг на друга, то будет положительное. По примеру думаю понятно, тот, что писал?:
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Замечание 1: k максимальных чисел можно найти отсортировав массив и взяв k последних элементов
Адаптация для отрицатеьных чисел:
|
|||
|
||||
| Master_ |
|
||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Спасибо
Получился такой код:
Я так думаю нужно еще сделать проверку
Ведь в не результирующем наборе чисел все они могут быть отрицательными Посмотрите код, может что где не дописал, или написал, но не очень
Тогда мне лучше переделать все на итераторы, или же без использования векторов новый массив создавать через new int[n] ?
|
||||||||||
|
|||||||||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Точно. В таком случае нужно поменять меньшее положительное (вошедшее в набор) на большее отрицательное (не вошедшее). Кстати, это можно сделать даже если положительные числа еще остались, и выбрать из 2х вариантов лучший
|
||||||
|
|||||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Я бы именно так и сделал. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Master_ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
О ужас...
Вместо 6*1 нужно -2*-4... Вот как же теперь это сделать.. да и куча намешанная уже получилась..
Что посоветуете? |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Это именно случай 'поменять меньшее положительное (вошедшее в набор) на большее отрицательное (не вошедшее)'. А сделать - для начала поделить функцию на логические части, явно поделить отсортированный массив на 2 части и сделать методы, которые позволили бы отдельно посчитать все вышеозвученные варианты не меняя сам массив. Вызвать их все и по результатам уже сделать выборку
|
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Предположим, что у тебя в массиве все элементы отрицательные и тебе нужно посчитать произведение нечётного количества чисел. Думаю, что твоя прога загнётся. Прийдётся делать, хотя бы, пересортировку. И вобще, при таком подходе, там нужно будет туеву хучу разных проверок делать. По-моему, твой алгоритм втопку и начать всё сначала. Например, посчитать перебором, рекурсию организовать какую-нибудь и т.п. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Вот, хоть и корявенько получилось, но, всё-таки, лучше, чем ничего..
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |