Подскажите как лучше реализовать алгоритм
От: _CODER_ Россия  
Дата: 01.04.16 15:39
Оценка: :)
Здравствуйте, есть массив классов в которых есть поля фамилия ID счета доход и расход.
Нужно найти человека с наибольшим вкладом. У одного человека может быть несколько счетов, вот что меня затормозило слегка. Нужно вывести фамилию из массива типа

T mass[] {"asdf",123123123,100,150}......asdf может встречаться сколь угодно раз
с уникальными фамилиями все яснее ясного — минимакс разницы расхода-дохода. Как лучше обработать повторы . Работа с динамическими массивами впереди(это поэтапный курсач друга) . Как решить вопрос с несколькими счетами у одной фамилии?
Re: Подскажите как лучше реализовать алгоритм
От: BulatZiganshin  
Дата: 01.04.16 15:41
Оценка: :)))
Здравствуйте, _CODER_, Вы писали:

_CO>T mass[] {"asdf",123123123,100,150}......asdf может встречаться сколь угодно раз

_CO>с уникальными фамилиями все яснее ясного — минимакс разницы расхода-дохода. Как лучше обработать повторы . Работа с динамическими массивами впереди(это поэтапный курсач друга) . Как решить вопрос с несколькими счетами у одной фамилии?

ты сразу напиши список того что вы уже проходили. а то тебе тут понапишут на gnu c++14 + openmp
Люди, я люблю вас! Будьте бдительны!!!
Re: Подскажите как лучше реализовать алгоритм
От: kov_serg Россия  
Дата: 02.04.16 07:45
Оценка:
Здравствуйте, _CODER_, Вы писали:



_CO>Здравствуйте, есть массив классов в которых есть поля фамилия ID счета доход и расход.

_CO>Нужно найти человека с наибольшим вкладом. У одного человека может быть несколько счетов, вот что меня затормозило слегка. Нужно вывести фамилию из массива типа

_CO>T mass[] {"asdf",123123123,100,150}......asdf может встречаться сколь угодно раз

_CO>с уникальными фамилиями все яснее ясного — минимакс разницы расхода-дохода. Как лучше обработать повторы . Работа с динамическими массивами впереди(это поэтапный курсач друга) . Как решить вопрос с несколькими счетами у одной фамилии?

Тогда сначала отсортируй массив по фамилиям. Сразу полегчает.
Re: Подскажите как лучше реализовать алгоритм
От: enji  
Дата: 02.04.16 08:40
Оценка:
Здравствуйте, _CODER_, Вы писали:


_CO>T mass[] {"asdf",123123123,100,150}......asdf может встречаться сколь угодно раз

_CO>с уникальными фамилиями все яснее ясного — минимакс разницы расхода-дохода. Как лучше обработать повторы . Работа с динамическими массивами впереди(это поэтапный курсач друга) . Как решить вопрос с несколькими счетами у одной фамилии?

Офтоп. Чет я не понял. У тебя в 2010 были вопросы по винапи и опенссл. В 2016 ты не можешь решить такое?

Онтоп.
* заведи map<string, int> и накапливай в нем баланс или
* предварительно отсортируй или
* (если не пугает O(n*n)) в цикле перебираешь элементы, во внутреннем цикле ищешь элементы с такими же ФИО, находишь баланс для ФИО, сравниваешь с текущим максимумом
Re[2]: Подскажите как лучше реализовать алгоритм
От: BulatZiganshin  
Дата: 02.04.16 17:24
Оценка: :))
Здравствуйте, enji, Вы писали:

E>Офтоп. Чет я не понял. У тебя в 2010 были вопросы по винапи и опенссл. В 2016 ты не можешь решить такое?


похоже это коллектор забрал у него аккаунт за долги
Люди, я люблю вас! Будьте бдительны!!!
Re: Подскажите как лучше реализовать алгоритм
От: tstalker Украина  
Дата: 02.04.16 20:49
Оценка:
Вообще-то это классическая задача для СУБД.
Так и просится Select From... etc.
Но раз уж требуется реализовать именно на C/C++, то как-то так:
1. Формирование списка вкладчиков из исходного массива. Каждый вкладчик будет иметь только 1 уникальную запись.
2. В цикле пробежаться по списку вкладчиков и при этом выбирать из исходного массива данные по каждому вкладчику с суммированием всех остатков на счетах.
3. Дальнейшее вычисление "человека с наибольшим вкладом" тривиально.
Отредактировано 02.04.2016 21:10 tstalker . Предыдущая версия .
Re: Подскажите как лучше реализовать алгоритм
От: Кодт Россия  
Дата: 04.04.16 12:57
Оценка:
Здравствуйте, _CODER_, Вы писали:

_CO>с уникальными фамилиями все яснее ясного — минимакс разницы расхода-дохода. Как лучше обработать повторы . Работа с динамическими массивами впереди(это поэтапный курсач друга) . Как решить вопрос с несколькими счетами у одной фамилии?


1) группировка (сортировка — как более строгий вариант группировки) масссива по фамилии, затем забег по массиву, суммирование и запоминание максимума
2) динамическая таблица текущих сумм для фамилий, забег по массиву с суммированием по ключу, затем забег по таблице в поисках максимума
3) развёртывание сиквел-сервера (sqlite, например), и написать суммирующий-группирующий запрос
select surname, sum(debit)-sum(credit) as total
from accounts
group by surname
order by total desc
limit 1



А минимакс — это, вообще-то, из теории игр.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.