Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработать несложный массив 
:(
    Опции темы
Robix
Дата 14.11.2014, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Дорый день. Помогите пожалуйста небольшую логику на c++ выполнить.
Имеется двумерный массив MyArray . Содержание его примерно такое:

Индекс0.....Индекс1 
capture1.....track1
release1.....track1
release2.....track1
release3.....track1
capture2.....track1
capture3.....track2
release4.....track2
release5.....track2

Т.е. у него всегда два индекса. В первом индексе всегда только либо capture, либо release с добавлением порядкового номера, начинающегося с единицы и так далее растущегов рамках всего массива. Во втором индексе всегда track также с добавлением порядкового номера по такому же принципу.

Требуется сформировать новый массив ResultArray, в который должны попасть все release'ы, которые в рамках  своего track (track это как ключ, который объединяет в своих рамках capture и release) отвечают такому условию:
После release сразу или через другие release'ы  идет capture и сразу перед release не capture. В данному случае под условие попадут release2 и release3.



PM MAIL   Вверх
xvr
Дата 17.11.2014, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Задача решается 2мя проходами по массиву. В первом проходе производится поиск индексов последних capture? для каждого track? (для этого можно завести map<string,Track> в котором ключем будет использован track? из исходного массива, а в стрктуре Track будет собираться информация о входах capture?)
Во 2м проходе осуществляется поиск необходимых release? (использованием того же map'а). В структуре Track должен быть флаг, который взводится при встрече capture? и сбрасывается в противном случае.
release? попадает на выход если его индекс меньше последнего capture? и вышеупомянутый флаг не взведен

PM MAIL   Вверх
Robix
Дата 18.11.2014, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Не понял насчет того, что и как попадет с структуру  Trackв map<string,Track>
Если несложно, можете код написать пожалуйста.   
PM MAIL   Вверх
sQu1rr
Дата 18.11.2014, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



Цитата(xvr @  17.11.2014,  13:54 Найти цитируемый пост)
Задача решается 2мя проходами по массиву. В первом проходе производится поиск индексов последних capture? для каждого track? (для этого можно завести map<string,Track> в котором ключем будет использован track? из исходного массива, а в стрктуре Track будет собираться информация о входах capture?)
Во 2м проходе осуществляется поиск необходимых release? (использованием того же map'а). В структуре Track должен быть флаг, который взводится при встрече capture? и сбрасывается в противном случае.
release? попадает на выход если его индекс меньше последнего capture? и вышеупомянутый флаг не взведен

А мне кажется, что можно и в один проход, если начинать с конца smile

Добавлено через 21 секунду
Цитата(Robix @  18.11.2014,  15:54 Найти цитируемый пост)
Если несложно, можете код написать пожалуйста.  

Тогда вам в центр помощи smile Ну или показывайте что не получается
PM MAIL Skype GTalk   Вверх
xvr
Дата 18.11.2014, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(sQu1rr @  18.11.2014,  19:16 Найти цитируемый пост)
А мне кажется, что можно и в один проход, если начинать с конца

Все равно в 1 не получится, из за требования -
Цитата(Robix @  14.11.2014,  13:50 Найти цитируемый пост)
сразу перед release не capture

оно требует анализа предыдущего элемента

Цитата(Robix @  18.11.2014,  17:54 Найти цитируемый пост)
Не понял насчет того, что и как попадет с структуру

Код

struct Track {
 int index_of_last_capture;
 bool prev_element_was_capture;
};
По одной штуке на каждый track?

Это сообщение отредактировал(а) xvr - 18.11.2014, 20:48
PM MAIL   Вверх
sQu1rr
Дата 18.11.2014, 21:18 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



Цитата(xvr @  18.11.2014,  18:43 Найти цитируемый пост)
оно требует анализа предыдущего элемента

Код

currentTrack = -1
hasCapture = false
lastRelease = null
result = []
for i = last .. 1
  track = arr[i][2]
  release = arr[i][1] startswith 'release' (bool)
  if track != currentTrack
    currentTrack = track
    hasCapture = false
  else if hasCapture = true and lastRelease != null and release = true
    result[] = lastRelease
    lastRelease = null
  if release = false
    hasCapture = true
    continue
  if hasCapture
    lastRelease = arr[i][1]

PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.