PASCAL急用!!

来源:百度知道 编辑:UC知道 时间:2024/05/06 14:37:12
有M个人,围成一个圈,依次报数,报到N的人出列,输出出列的顺序(从键盘中输入M,N),如输入3,2,则输出2,1,3.(用数组做).

方法1>program lx365;
var a:array[1..100] of integer;
i,j,n,p:integer;
begin read(m);
for i;=1 to m-1 do
a[i]:=i+1;
a[m]:=1;
read(n);
write('n=',n);
p:=m;
for i:=1 to m do
begin
for j:=1 to n-1 do
p:=a[p];
write(a[p]:3);
a[p]:=a[a[p]];
end;
end.

方法2>program lx391;
type nodeptr=^node;
node=record
data:integer;
next:nodeptr
end;
var head,p,q:nodeptr;
n,m,i:integer;
begin readln(m,n);
for i:=1 to n do
begin new(q);
q^.data:=i;
if i=1 then head:=q
else p^.next:=q;
p:=q;
if i=m then p^.next:=head;
end;
p:=head;
repeat
for i:=1 to n-2 do
p:=p^.next;
q:=p^.next;
p^.next:=p^.next^.next;
writeln(q^.data);
dispose(q);
p:=p^.next;
until p=p^.next;
writeln(p^.data);
end.

经典的约瑟夫问题
网上一索就有
一般的初级编