Задача об игроках

Задача.

В игре берет участие N игроков. Выбывает из игры игрок с номером D. Счет повторяется для оставшихся.  Указать порядковый номер игрока, который остался.

Например: есть 6 игроков. Выбывает каждый 2-ой

1 2 3 4 5 6

1 0 1 0 1 0  после первого прохода каждый второй выбыл

1 0 0 0 1 0  после второго прохода каждый второй выбыл и продолжая счет на третий проход получим

0 0 0 0 1 0 — остался игрок с номером 5.

 
const
n = 6;//колличество игроков

var
g: array [1..n] of byte;
d: byte;
i,k,j,p: integer;
f: boolean;

begin
f := true;

//все игроки в игре = 1
for i := 1 to n do
begin
	g[i] := 1;
	write(g[i]:3)
end;

writeln('Number gamer for Exit');
readln(d);

i:=1;
p:=1;
while f do //пока не остался 1 игрок - считаем
begin
	if (g[i]=1) and (p mod d=0) then 
	begin
		g[i]:=0; //игрок на выход
		p:=0;
	end;
inc(i);
if i>n then i:=1; //проходим массив по кругу
if g[i]=1 then inc(p);

k:=0;
for j := 1 to n do //смотрим, сколько игроков осталось
if g[j] = 1 then inc(k);
if k = 1 then f := false;//1 игрок - победитель
end;

for i:=1 to n do
if g[i]=1 then writeln(i);// указываем номер оставшегося игрока

end.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

0 0 vote
Article Rating
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments