imho.ws |
![]() |
![]() |
![]() |
# 21 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
a_ber
Ну дык, иди по списку, запоминай адреса, по которым прошел, и проверяй наличие очередного адреса в списке запомненных. Если найдешь повторяющийся, значит нашел начало петли. Признаю, алгоритм - дубовый, но сработает. ![]() Может многие помнят по школе такую задачу: даны три натуральных числа - n, m и k. Необходимо найти k-ую цифру после запятой в десятичной дроби n/m. Я тут усложнил задачу и дал ее на недавно прошедшей в нашем ВУЗе олимпиаде - ни одна собака не решила. ![]() ![]()
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
![]() |
![]() |
# 22 |
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ghost
Ошибка. Надо превратить в queue. Шапку исправил.
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
![]() |
![]() |
# 23 |
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ghost
Гы ![]()
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
![]() |
![]() |
# 24 |
::VIP::
Регистрация: 11.06.2003
Адрес: Там...
Сообщения: 236
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ghost
Решение задачи: Код:
function MM(m1,m2:integer):string; var i,k,l:integer; s,m,b,d,dudu:string; ok:boolean; begin s:=FloatToStr(m1/m2); if pos(',',s)<=0 then begin Result:=s; exit; end; b:=copy(s,1,pos(',',s)-1); delete(s,1,pos(',',s)); for i:=1 to Length(s) do begin for k:=1 to Length(s)-i do begin m:=''; d:=s; delete(d,1,i-1); m:=copy(s,i,k); delete(d,1,Length(m)); if pos(m,d)>0 then begin ok:=true; delete(d,(length(d) div Length(m))*Length(m),length(d)); for l:=1 to (length(d) div Length(m)) do begin dudu:=copy(d,(l*Length(m))-(Length(m)-1),Length(m)); if (Length(m)<=Length(d)-l*Length(m)) and (dudu<>m) then begin ok:=false; break; end; end; if ok then begin Result:=b+','+copy(s,1,i-1)+'('+m+')'; exit; end; end; end; end; end; В каком ты там вузе? |
![]() |
![]() |
# 25 |
Member
Регистрация: 24.03.2003
Сообщения: 300
![]() ![]() ![]() ![]() ![]() ![]() |
a_ber
Pomoemy , esli vziat' dva ykazatelia i pustit' po spisky ... tol'ko odin (1) na sled. element a drygoy (2) cherez element, i proveriat' ih addresa ... esli odin iz ykazateley popal na Null znachit spisok ne zamknytiy , a esli addresa sovpali znachit est' petlia ... t.e. ykazatel' (2) "dogonit" ykazatel' (1) na listike vrode rabotaet ...
__________________
0 Вы в интернете 1 Вы на сайте http://www.imho.ws 2 Вы читаете это 4 Вы не заметили отсутствия пункта 3 5 Вы это проверили 6 Вы улыбаетесь |
![]() |
![]() |
# 26 |
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ghost
А рекурсией слабо лист развернуть ? gigi Код:
Node *ReverseList(Node *current, Node *parent) { Node *temp; if(current == null) temp= parent; else { temp = ReverseList(current->next, current); current->next = parent; } return temp; } Вызываем: NewTail = ReverseList(tail, NULL);
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
![]() |
![]() |
# 27 | |||
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Programmer
Цитата:
![]() f00rd Цитата:
Оригинальное решение, но можно проще: Код:
uses crt; var n, m, p, k: byte; s, d: string; begin repeat clrscr; write ('n = '); readln (n); repeat write ('m = '); readln (m); if m = 0 then writeln ('error: m = 0!'); until m > 0; k := n mod m; s := ''; d := ''; p := 255; while (p >= length(s)) and (k <> 0) do if pos(chr(k), d) <> 0 then begin p := pos(chr(k), d); s := Copy(s,1,p-1) + '(' + Copy(s,p,length(s)) + ')'; end else begin s := s + chr (48 + ((10 * k) div m)); d := d + chr (k); k := (10 * k) mod m; end; writeln ('n/m = ' , n div m, ',',s); writeln ('press ESC for exit..'); until readkey = #27; end. Цитата:
![]() А слабо выполнить эту же задачу в Прологе? ![]()
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
|||
![]() |
![]() |
# 28 |
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
2Programmer
Вполне можно обойтись одним параметром: Код:
Node *ReverseList(Node *current) { Node *temp; if(current->next==NULL) temp= current; else { temp = ReverseList(current->next); current->next->next=current; current->next=NULL; } return temp; }
__________________
Best Regards |
![]() |
![]() |
# 29 |
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
BRULIK
Ghost Уважаемые сэры. Ваше решение по поводу петли неправильное. Дан лист: a->b->c->d->e и петля e->b начало: p1 = a, p2 = c шаги: 1. p1 = b, p2 = d 2. p1 = c, p2 = e 3. p1 = d, p2 = b 4. p1 = e, p2 = c 5. p1 = b, p2 = d Видно, что уже на 5-ом шаге мы приходим в ситуацию 2-го шага. И так далее. Да и посудите сами. С чего им догонять друг друга, если двигаются они с одинаковой скоростью. Расстояние между ними будет сохраняться.
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
![]() |
![]() |
# 30 |
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
BRULIK
Ghost Весь прикол в том что они должны двигаться с разными скоростями. Чего вы в вашем решении не указали ![]() Код:
Node* p1 = tail, *p2 = tail; bool bLoop = false; while ( p1 != NULL && p2 != NULL ) { p1 = p1->next; p2 = (p2->next != NULL) ? p2->next->next : NULL; if ( (bLoop = (p1==p2)) ) break; } 1. p1 = b, p2 = c 2. p1 = c, p2 = e 3. p1 = d, p2 = c 4. p1 = e, p2 = e --> FINISH
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
![]() |
![]() |
# 32 |
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
brulik
Та как ты написал, не понятно, к чему относится "через один". К начальной позиции или к скорости.
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
![]() |
![]() |
# 33 |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
ребяты...
![]() push & pop ка раз меняет местами значения ... остальные - АСМ форева! нефиг пугать... если сообразительность заключается только в этом... по-моему ребята дали развернутые ответы... |
![]() |
![]() |
# 34 |
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
/7y3uK
Если честно, из твоего поста мало что понял. Что ты хотел сказать? 2 All Осталась 3-я задача (см. шапку). Если никто не решает, даю решение завтра.
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
![]() |
![]() |
# 35 |
Newbie
Регистрация: 25.11.2003
Адрес: Near monitor
Сообщения: 49
![]() |
По поводу задачи о петле:
а) Начало правильное, но я еще не видел где координата за линейное время? б) Гост: линейной дополнительной памяти никто не давал ![]() Мне (и не тол'ко мне) нравится этот паттерн: 2 пойнтера движушиеся с разной скоростью --- он иногда красиво применим в разных задачах, помню что были, но не помню деталей... в) Есть еще одно решение этой части задачи... кто найдет? |
![]() |
![]() |
# 36 | |
Full Member
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
берётся две интовые переменные (first_elem,first_empty). Одна указывает на первое занятое место в векторе, вторая на первое незанятое. Вначале обе указывают на 0. Также нужен флаг который говорит очередь пустая или полная, так как эти состояния рваны, с точки зрения указателей(first_elem == first_empty). Добавление элемента: Код:
if (queue_full == false) { arr[first_empty] = elem; first_empty=(first_empty+1) % arr_size.; if (first_empty == first_elem) queue_full = true; } else return QUEUE_FULL_ERROR Код:
if (queue_full == true || first_empty != first_elem) { elem = arr[first_elem]; first_elem=(first_elem+1) % arr_size.; queue_full = false; } else return QUEUE_EMPTY_ERROR first_elem = first_empty = 0; queue_full = false;
__________________
Столько дел, что и работой занятся некогда... |
|
![]() |
![]() |
# 37 | ||
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
joker99
Ну скажем не совсем так. Вторая функция у тебя не правильна. Во-первых когда ты Цитата:
Цитата:
Вот правильная имплементация dequeue(): Я держу переменные head (продвигается вправо когда элемент достаётся), tail (продвигается вправо когда елемент кладут в очередь) и count (для контроля над количеством элементов). Код:
Object dequeue() { if ( count == 0 ) throw new Exception("Queue is empty"); Object result = array[head]; array[head] = null; head = ++head % array.length; count--; return result; }
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
||
![]() |
![]() |
# 38 | |||
Full Member
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
Цитата:
Ну неподумал я использовать простой счётчик, а так мой алгоритм работает.
__________________
Столько дел, что и работой занятся некогда... |
|||
![]() |
![]() |
# 39 | ||
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
||
![]() |
![]() |
# 40 | |
Full Member
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Тем более если елемент это не объект а value-type, то неизветно чем заполнят пустое место.
__________________
Столько дел, что и работой занятся некогда... |
|
![]() |