Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uses
- System.SysUtils;
- type
- PNode = ^TNode;
- TNode = record
- Data: Integer;
- Next: PNode;
- end;
- function Count(N, M: Integer): string; cdecl;
- var
- Head, Current, Prev: PNode;
- i: Integer;
- begin
- Result := '';
- Head := nil;
- Prev := nil;
- // Создание кольца
- for i := 1 to N do
- begin
- New(Current);
- Current.Data := i;
- if Head = nil then
- Head := Current
- else
- Prev.Next := Current;
- Current.Next := Head;
- Prev := Current;
- end;
- // Проход по кругу и удаление каждого M-го участника
- Current := Head;
- Prev := nil;
- while Current^.Next <> Current do
- begin
- // Пропускаем M-1 участников
- for i := 1 to M - 1 do
- begin
- Prev := Current;
- Current := Current^.Next;
- end;
- // Удаляем текущего участника
- Prev^.Next := Current^.Next;
- Result := Result + IntToStr(Current^.Data) + ', ';
- // Переходим к следующему участнику
- Prev := Current;
- Current := Current^.Next;
- Dispose(Prev);
- end;
- // Последний оставшийся участник
- Result := Result + IntToStr(Current^.Data);
- Dispose(Current);
- // Возвращаем результат
- Result := '[' + Result + ']';
- end;
- exports
- Count;
- begin
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement