PASCAL语言的约瑟夫问题

来源:百度知道 编辑:UC知道 时间:2024/06/13 18:18:05
n个人围成一圈,从第一个人开始报数,数到k的人出圈。再由下一个人开始报数,数到k的人出圈,.....到n-1次时,输出最后一个人的号码!
拜托各位高手,帮帮我这位初出茅庐的菜鸟把^v^!
n个人围成一圈,从第一个人开始报数,数到m的人出圈。再由下一个人开始报数,数到m的人出圈,报到n个人时,则反向报数.......输出最后一个人的号码!

应该没有问题,有什么问题你说
var n,m,i,j,times,num:integer;
a:array[1..1000] of integer;
b:boolean;

begin
readln(n,m);

for i:=1 to n do
a[i]:=i;

j:=0;
times:=0;
b:=false;
i:=0;
num:=1;

while true do
begin
inc(i,num);
if i=0 then i:=n;
if i=n+1 then i:=1;

if a[i]<>0 then inc(j);

if j=n then
begin
if num=1 then num:=-1 else num:=1;
end;

if j=m then
begin
j:=0;
a[i]:=0;
inc(times);
if times=n-1 then begin b:=true;break; end;
end;
end;

for i:=1 to n do
if a[i]<>0 then begin writeln(i);break end;
end.

没有错误
给他分吧

用循环链表就可以解决……