Давно это было, сдал и забыл но тут попросили помочь, отказаться не удобно, в общем выручайте пжл. Вот такая задача:
Даны натуральные n,m. Предполагая, что n человек встают в круг и получают номера, считая против часовой стрелки, 1,2, …n. Затем, начиная с первого, так же против часовой отсчитывается m-й человек (поскольку люди стоят по кругу, то за n-м человеком стоит первый). Этот человек выходит из круга, после чего, начиная со следующего, снова отсчитывается m-й человек и так до тех пор, пока из всего круга не останется один человек, Определить его номер.
ShadowWatcher
8.12.2004 14:42
Код
Const
MaxN = 10;
Var
i,j,k,m,n:Integer;
a:Array[1..MaxN] Of Boolean;
Begin
Write('Enter n: ');
ReadLn(n);
Write('Enter m: ');
ReadLn(m);
For i:=1 To n Do
a[i] := True;
i:=1;
While i < n Do
Begin
j:=1;
k:=0;
While j < m Do
Begin
k := ((k + 1) Mod n) + 1;
If a[k] Then
Inc(j)
End;
a[k] := False;
Inc(i)
End;
For i:=1 To n Do
If a[i] Then
Begin
WriteLn(i);
Break
End
End.
Вроде бы так...
ShadowWatcher
Сколько раз повторять - проверяй код !!!
Программа виснет при n = 10 и m = 3...
Zerg Вот здесь есть очень похожая задачка (правда, там отсчет - по часовой стрелке...)