program metskapten_dyn; uses crt; type DynReisija=^reisija; //viit kirjele reisija = record nr: integer; link: DynReisija; end; var n,s,m:integer;// reisijate arv, sugulaste arv, mitmes v„ljavisatakse killcount:integer; // reisijate arv - sugulaste arv = uppujad i:integer; runner,atend,node,head:DynReisija; //vajalikud viidad begin clrscr; write('Mitu reisijat: ');readln(n); write('Mitu sugulast: ');readln(s); write('Mitmendad v„lja: '); readln(m); // n arvu reisijate tekitamine *ringnimistusse* // teeme head'i new(head); head^.nr:=1; head^.link:=head; //teeme lej„„nud reisijad for i:=2 to n do begin //tskkel, et leida kohta kuhu uus reisija pista, st ringi peale enne head'i runner:=head; AtEnd:=head; repeat if runner^.link<> head then AtEnd:=runner^.link; //AtEnd saab olema läpuks enne head'i runner:=runner^.link; //runner jookseb edasi kuni on head ja tskkel läpeb until runner=head; //uue reisija loomine new(node); node^.nr:=i; node^.link:=head; //viimane objekt viitab esimesele, et tekiks ring AtEnd^.link:=node; end; // n reisijat on nd valmis KillCount:=n-s; runner:=node; //kustutama hakatakse PŽRAST runnerit tulevat objekti while KillCount>0 do //kuni mittesugulasi veel j„tkub begin KillCount:=KillCount-1; //äige elemendi ETTE minek for i:=1 to m-1 do begin runner:=runner^.link; end; //peaks olema äige elemendi EES //elemendi kustutamine if runner^.link<>head then //kui kusutatav pole head begin node:=runner^.link; //debug info writeln('Kustutamisele l„heb:', node^.nr); runner^.link:=node^.link; runner:=node; //debug info writeln('Runner on praegu:', runner^.nr); end else //kui kustutatav on head begin //debug info writeln('kustutamisele l„heb head'); head:=head^.link; runner^.link:=head; //debug info writeln('uus head on ',head^.nr); end; end; //kindlate kohtade kuvamine runner:=head; i:=0; Writeln('Kapten peaks ringis paigutama oma sugulased kohtadele: '); repeat i:=i+1; write(runner^.nr:6,'; '); runner:=runner^.link; until runner=head; //debug info writeln('kokku: ',i); readkey; end.