Условие задачи:
В круге стоят N человек. Условно пронумеруем их по порядку от 1 до N. Первый начинает произносить считалку из K слов (каждый следующий человек произносит следующее слово). Тот, кто произнес последнее слово, выбывает. Затем считалку начинает произносить следующий за выбывшим и т.д. Процесс продолжается до тех пор, пока не останется один человек. Определите его номер.
Входные данные: Два натуральных числа n и k (2<=n<=10000, 1<=k<=100).
Выходные данные: Одно число - номер оставшегося человека
Пример входных данных:
5 3
Пример выходных данных:
4
Мое решение на Delphi
<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>
program Project1;
{$APPTYPE CONSOLE}
var n,z:word;
a,b: array [1..10000] of word;
k:byte;
begin
readln(n,k);
for z:=1 to n do a[z]:=z+1;
a[n]:=1;
for z:=1 to n do b[z]:=z-1;
b[1]:=n;
n:=1;
repeat
for z:=1 to k-1 do n:=a[n];
if (a[n]=b[n]) then break;
a[b[n]]:=a[n];
b[a[n]]:=b[n];
n:=a[n];
until false;
write(a[n]);
readln;
end.
</td></tr></table>
К началу статьи