считалка. заданы натуральные числа M и N (M число детей в круге, N число слов в считалке). создать программу,выводящую на экран номера детей в порядке выбывания ( здесь можно решить и с помощью массива)
Поиск по форуму, ключевое слово - "Казнь"... Чуть-чуть модифицировать, и получишь то, что тебе нужно...
спасибо
что то очень тяжелая,легче никак?
Так пойдет ?
uses crt;
const
max_len = 255;
type
TArray = array [1..max_len] of Integer;
procedure Fill(var arr: TArray; n: Integer);
var
i: Integer;
begin
for i := 1 to n do arr[i] := i;
end;
procedure Print(const arr: TArray; const n: Integer);
var
i: Integer;
begin
writeln;
for i := 1 to n do write(arr[i]:3);
writeln;
end;
procedure Del(var arr: TArray; var n: Integer; const p: Integer);
var
i: Integer;
begin
for i := p to n - 1 do
arr[i] := arr[i + 1];
n := n - 1;
end;
function GetNext(var arr: TArray; var n: Integer; var p: Integer; shift: Integer): Integer;
var
tShift: Integer;
begin
if p + shift <= n then begin
p := p + shift;
end
else begin
tShift := shift - (n - p);
p := 0;
while (tShift > n) do tShift := tShift - n;
p := tShift;
end;
Del(arr, n, p);
GetNext := p;
Dec(p);
end;
procedure GetSequence(arr: TArray; n, shift: Integer);
var
p: Integer;
begin
p := 0;
while (n > 0) do begin
GetNext(arr, n, p, shift);
Print(arr, n);
end;
end;
var
a: TArray;
n, shift: Integer;
begin
clrscr;
write('N = '); readln(n);
write('Shift = '); readln(shift);
Fill(a, n);
clrscr;
Print(a, n);
GetSequence(a, n, shift);
readln;
end.
да спс
А не подскажите как вывести последовательность выбывших? Столкнулся с подобной задачей, а паскаль уже почти не помню.
uses crt;
const
max_len = 255;
type
TArray = array [1..max_len] of Integer;
procedure Fill(var arr: TArray; n: Integer);
var
i: Integer;
begin
for i := 1 to n do arr[i] := i;
end;
procedure Print(const arr: TArray; const n: Integer);
var
i: Integer;
begin
writeln;
for i := 1 to n do write(arr[i]:3);
writeln;
end;
procedure Del(var arr: TArray; var n: Integer; const p: Integer);
var
i: Integer;
begin
for i := p to n - 1 do
arr[i] := arr[i + 1];
n := n - 1;
end;
function GetNext(var arr: TArray; var n: Integer; var p: Integer; shift: Integer): Integer;
var
tShift: Integer;
begin
if p + shift <= n then begin
p := p + shift;
end
else begin
tShift := shift - (n - p);
p := 0;
while (tShift > n) do tShift := tShift - n;
p := tShift;
end;
Del(arr, n, p);
GetNext := p;
Dec(p);
end;
procedure GetSequence(arr: TArray; n, shift: Integer);
var
p: Integer;
begin
p := 0;
while (n > 0) do begin
GetNext(arr, n, p, shift);
Print(arr, n);
end;
end;
var
a: TArray;
n, shift: Integer;
begin
clrscr;
write('N = '); readln(n);
write('Shift = '); readln(shift);
Fill(a, n);
clrscr;
Print(a, n);
GetSequence(a, n, shift);
readln;
end.