Advertisement
dxvmxnd

Untitled

Mar 17th, 2024 (edited)
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. uses
  2. System.SysUtils;
  3.  
  4. type
  5. PNode = ^TNode;
  6. TNode = record
  7. Data: Integer;
  8. Next: PNode;
  9. end;
  10.  
  11. function Count(N, M: Integer): string; cdecl;
  12. var
  13. Head, Current, Prev: PNode;
  14. i: Integer;
  15. begin
  16. Result := '';
  17. Head := nil;
  18. Prev := nil;
  19.  
  20. // Создание кольца
  21. for i := 1 to N do
  22. begin
  23. New(Current);
  24. Current.Data := i;
  25.  
  26. if Head = nil then
  27. Head := Current
  28. else
  29. Prev.Next := Current;
  30.  
  31. Current.Next := Head;
  32. Prev := Current;
  33. end;
  34.  
  35. // Проход по кругу и удаление каждого M-го участника
  36. Current := Head;
  37. Prev := nil;
  38. while Current^.Next <> Current do
  39. begin
  40. // Пропускаем M-1 участников
  41. for i := 1 to M - 1 do
  42. begin
  43. Prev := Current;
  44. Current := Current^.Next;
  45. end;
  46.  
  47. // Удаляем текущего участника
  48. Prev^.Next := Current^.Next;
  49. Result := Result + IntToStr(Current^.Data) + ', ';
  50.  
  51. // Переходим к следующему участнику
  52. Prev := Current;
  53. Current := Current^.Next;
  54. Dispose(Prev);
  55. end;
  56.  
  57. // Последний оставшийся участник
  58. Result := Result + IntToStr(Current^.Data);
  59. Dispose(Current);
  60.  
  61. // Возвращаем результат
  62. Result := '[' + Result + ']';
  63. end;
  64.  
  65. exports
  66. Count;
  67.  
  68. begin
  69. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement