Помощь - Поиск - Пользователи - Календарь
Полная версия: Считалочка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zerg
Давно это было, сдал и забыл но тут попросили помочь, отказаться не удобно, в общем выручайте пжл. Вот такая задача:

Даны натуральные n,m. Предполагая, что n человек встают в круг и получают номера, считая против часовой стрелки, 1,2, …n. Затем, начиная с первого, так же против часовой отсчитывается m-й человек (поскольку люди стоят по кругу, то за n-м человеком стоит первый). Этот человек выходит из круга, после чего, начиная со следующего, снова отсчитывается m-й человек и так до тех пор, пока из всего круга не останется один человек, Определить его номер.
ShadowWatcher
Код

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.


Вроде бы так...
volvo
ShadowWatcher

Сколько раз повторять - проверяй код !!!
Программа виснет при n = 10 и m = 3...


Zerg

Вот здесь есть очень похожая задачка (правда, там отсчет - по часовой стрелке...)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.