Много ще бъда благодарен за помощ с този алгоритъм/псевдокод.
По принцип търся думи с определен модел (няма значение какъв). Имам специална функция за определянето му, която връща 1, ако думата отговаря на изискванията. Когато това стане, втората дума след това трябва да бъде пропусната и да не се записва в изхода. Нямах проблем с това, когато "избраните" думи са разделени от една "неизбрана" дума. Проблемът е - какво да правим, когато "избраните" се появяват един след друг?
Подготвих такъв псевдо код, за да изясня малко ситуацията. Но за съжаление не работи за всички комбинации от „избрано“ и „неизбрано“.
Въведох три брояча/променливи, които ми помагаха да открия позицията, на която се намирам в момента.
Следващият псевдо код не е в логичен ред!
if (counter == 2 || in_a_row >= 3) {
erase = 1;
counter--;
yes = 0;
if (!chosen)
counter = 0;
}
if (chosen) {
counter++;
yes = 1;
in_a_row++;
} else {
if (yes = 1) /* yes - is used when the preceeding word is chosen and the next is not chosen, in order to keep track of the counter */
counter++;
}
if (in_a_row == 5)
in_a_row = 4; /* just to make sure that counter doesn't go too high */
if (erase == 1)
/*erasing procedure*/
Ако имате по-проста идея или видите грешка в нея, МОЛЯ, помогнете ми. Опитвайки се да отработя това в продължение на 8 часа...
i
, просто маркирайте позицияi+2
, която трябва да бъде изтрита. И това е. Това би довело до случая, при който задействащите думи вi
иi+1
ще изтрият думи вi+2
иi+3
. Задействащите думи приi
,i+1
иi+2
биха изтрили думите приi+2
(което само по себе си е задействаща дума),i+3
иi+4
. Какво ми липсва тук? - person rpsml   schedule 26.08.2012