改进约瑟夫(Joseph)环问题
改进约瑟夫问题的描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人有一个密码Ki(整数),留作其出圈后应报到Ki后出圈。报数方法采用顺时针报数和逆时针报数交替...
改进约瑟夫问题的描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈, 每人有一个密码Ki(整数),留作其出圈后应报到Ki后出圈。报数方法采用顺时针报数和逆时针报数交替进行,初始密码可任意确定。求最后剩下的人的编号。
展开
1个回答
2009-06-10
展开全部
const
max=1000;
type
ysf=record
left:integer;
right:integer;
num:integer;
end;
var
a:array[1..max]of ysf;
i,j,p,t,n,m:integer;
x:boolean;
begin
read(n,m);
for i:=1 to n do
read(a[i].num);
if n>max then begin write('error');exit;end;
for i:=2 to n-1 do
begin
a[i].left:=i-1;
a[i].right:=i+1;
end;
a[1].left:=n;a[1].right:=2;
a[n].left:=n-1;a[n].right:=1;
p:=n;t:=n;x:=true;
while t>0 do
begin
for j:=1 to m do
if x then p:=a[p].right
else p:=a[p].left;
write(a[p].num:4);
a[a[p].left].right:=a[p].right;
a[a[p].right].left:=a[p].left;
x:=not(x);
dec(t);
end;
end.
不晓得你要什么语言的
max=1000;
type
ysf=record
left:integer;
right:integer;
num:integer;
end;
var
a:array[1..max]of ysf;
i,j,p,t,n,m:integer;
x:boolean;
begin
read(n,m);
for i:=1 to n do
read(a[i].num);
if n>max then begin write('error');exit;end;
for i:=2 to n-1 do
begin
a[i].left:=i-1;
a[i].right:=i+1;
end;
a[1].left:=n;a[1].right:=2;
a[n].left:=n-1;a[n].right:=1;
p:=n;t:=n;x:=true;
while t>0 do
begin
for j:=1 to m do
if x then p:=a[p].right
else p:=a[p].left;
write(a[p].num:4);
a[a[p].left].right:=a[p].right;
a[a[p].right].left:=a[p].left;
x:=not(x);
dec(t);
end;
end.
不晓得你要什么语言的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询