约瑟夫问题:完成下面的程序 ( 积分: 100 )

  • 主题发起人 主题发起人 lqf802
  • 开始时间 开始时间
L

lqf802

Unregistered / Unconfirmed
GUEST, unregistred user!
设有n个人围成一个圈并接顺时针方向由1~n编号。从第s个人开始进行从1到m报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m报数,如此进行下去,直到所有的人都出圈为止。
(选自刘艺的《Delphi程序设计大学教程》)
Program joseph;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n=10;
s=2;
m=4;
var
p:array [1..n] of integer;
I,j,k,ml,sl:integer;
W:________;
begin
Ml:=m;//1到m报数
Sl:=s;//第s个人开始进行报数
For I:=1 to ndo
__________;
for I:=ndo
wnto 1do
begin
sl:=___________;
if sl=0 then
________;
w:=p[sl];
p:=w;
end;
writeln(inttostr(n)+’个人围成一个圈并接顺时针方向由1开始顺序编号。’);
writeln(‘从第’+inttostr(s)+’个人开始进行从1到’
+inttostr(m)+’报数,报数到’+inttostr(m)+’的人出圈。’)
writeln(‘出圈先后顺序如下:’);
for_________do
write(p:4);
readln;
end;
 
设有n个人围成一个圈并接顺时针方向由1~n编号。从第s个人开始进行从1到m报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m报数,如此进行下去,直到所有的人都出圈为止。
(选自刘艺的《Delphi程序设计大学教程》)
Program joseph;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n=10;
s=2;
m=4;
var
p:array [1..n] of integer;
I,j,k,ml,sl:integer;
W:________;
begin
Ml:=m;//1到m报数
Sl:=s;//第s个人开始进行报数
For I:=1 to ndo
__________;
for I:=ndo
wnto 1do
begin
sl:=___________;
if sl=0 then
________;
w:=p[sl];
p:=w;
end;
writeln(inttostr(n)+’个人围成一个圈并接顺时针方向由1开始顺序编号。’);
writeln(‘从第’+inttostr(s)+’个人开始进行从1到’
+inttostr(m)+’报数,报数到’+inttostr(m)+’的人出圈。’)
writeln(‘出圈先后顺序如下:’);
for_________do
write(p:4);
readln;
end;
 
1、w: Integer;
2、p := i;
3、s1 := (s1 + m - 1) mod i;
4、s1 := i;
5、for i := ndo
wnto 1do
6、老兄,你的问题是不是还带改错的???那本书没看过,我想 “p:=w;” 和 “w := p[sl];” 那两句之间似乎少了个填空:
w := p[sl];
for j := s1 + 1 to ido

s[j - 1] := s[j];
p := w;
不然这个片段不会取得什么结果,且白白浪费变量 w,出题人应该没这么白痴。
7、变量 k 没用上。
 
填空。。。。不会做了。。。。用数组没思路 哈哈
为什么不用指针链表? 那样多简单啊递归循环就搞定了,效率也高 嘿嘿
 
楼主显然在做书后作业。
 
接受答案了.
 
后退
顶部