Другие языки программирования и технологии

Помогите решить задачу решение на Паскале

В нашем варианте мы начнем с того, что выстроим в круг N человек, пронумерованных числами от 1 до N, и будем исключать каждого k-ого до тех пор, пока не уцелеет только один человек. (Например, если N=10, k=3, то сначала умрет 3-й, потом 6-й, затем 9-й, затем 2-й, затем 7-й, потом 1-й, потом 8-й, за ним – 5-й, и потом 10-й. Таким образом, уцелеет 4-й.) Задача: определить номер уцелевшего. Формат входных данных Во входном файле даны натуральные числа N и k. 1 ≤ N ≤ 100000, 1 ≤ k ≤ 100. Формат выходных данных Выходной файл должен содержать единственное число – номер уцелевшего человека. Пример input.txt output.txt 10 3 4
Как-то так

program pr_ring;

{$APPTYPE CONSOLE}

uses
SysUtils;
type
pRing = ^TRing;
TRing = record
Value: integer;
Prev, Next: pRing;
end;

procedure Insert(var ring: pRing);
var
p, n: pRing;
begin
p := ring;
if (p = nil) then
begin
New(p);
p^.Value := 1;
p.Next := p;
p.Prev := p;
ring := p;
end
else begin
while (p^.Next <> ring) do
p := p^.Next;
New(n);
n^.Value := p^.Value + 1;
n.Next := ring;
n.Prev := p;
p^.Next := n;
ring^.Prev := n;
end;
end;

function Length(ring: pRing): integer; forward;

procedure Delete(var ring, last: pRing; Pos: integer);
var
p, pr, nx: pRing;
i: integer;
begin
p := last;
if (p <> nil) then
begin
for i := 1 to Pos - 1 do
p := p^.Next;
pr := p^.Prev;
nx := p^.Next;
pr^.Next := nx;
nx^.Prev := pr;
last := nx;
if (ring = p) then
ring := last;
Dispose(p);
end;
end;

function Length(ring: pRing): integer;
var
p: pRing;
c: integer;
begin
if (ring = nil) then
Length := 0
else begin
c := 1;
p := ring;
while (p^.Next <> ring) do
begin
p := p^.Next;
Inc(c);
end;
Length := c;
end;
end;

var
n, k, i: integer;
ring, last: pRing;
f1, f2: Text;
begin
Assign(f1, 'input.txt');
Reset(f1);
Assign(f2, 'output.txt');
Rewrite(f2);
ring := nil;
read(f1, n);
read(f1, k);
for i := 1 to n do
Insert(ring);
last := ring;
while (Length(ring) <> 1) do
Delete(ring, last, k);
writeln(f2, ring^.Value);
Dispose(ring);
Close(f1);
Close(f2);
end.
HH
Has Has
5 082
Лучший ответ
ты правда думаешь что тебе кто то будет это все решать? лучше учи pascal, сейчас созданы для этого все условия! Хочешь книжку купи, хочешь видео курс закажи (pascalvideo. ru) возможностей куча!! ! а не сиди здесь и не клянчи решение!!!
Андрей Ефешин
Андрей Ефешин
2 676
ай яй яй как не стыдно это ж Всеросийская олимпиада по информатике должно быть стыдно
сам решай свою олимпиаду нечево у гениев решение просить
Да, вопрос ты так и не задал. Сделать это за тебя?!
FL
Fenix Loon
231
ты где учишься????