主题:[讨论]猴子问题。链表法怎么处理?????
cometolife
[专家分:0] 发布于 2008-01-05 16:53:00
[b][b][i]有M只猴子围成一圈,每只各一个从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M、N,编程计算哪一个编号的猴子成为大王
[b][/b][/i][/b][em10][em10][em10][em10][em10][/b]
回复列表 (共5个回复)
沙发
雨中飞燕 [专家分:18980] 发布于 2008-01-07 16:49:00
Jonseph
随便一找就N多代码,请自行搜索
板凳
游侠UFO [专家分:1200] 发布于 2008-01-15 19:39:00
做个循环链表就行了撒..
3 楼
feibird [专家分:0] 发布于 2008-01-25 15:04:00
program sda;
type
point=^monkey;
monkey=record
num:integer;
next:point;
end;
var
head,p,q:point;
n,m:integer;
procedure creat(var head:point; n:integer); 建立循环链表
var
p,q:point; i:integer;
begin
new(p);
head:=p; p^.num:=1; q:=p;
for i:=2 to n do
begin
new(p); p^.num:=i;
q^.next:=p; q:=p;
end;
q^.next:=head;
end;
procedure elect(var head:point; m:integer); 这是一个报数过程
var
p,q:point;
i,x:integer;
begin
p:=head; x:=1; q:=p;
repeat
p:=q^.next;
x:=x+1;
if x mod m=0 then begin
q^.next:=p^.next;
write(p^.num:8);
dispose(p);
end
else q:=p;
until p=p^.next;
writeln;
head:=p;
end;
BEGIN
write('enter m and n:');
readln(m,n);
creat(head,n);
elect(head,m);
writeln('the leader is:',head^.num);
END.
4 楼
feibird [专家分:0] 发布于 2008-01-25 15:11:00
怎么样?看得懂吗?把两个过程拿出来手算一下就知道了。
5 楼
feibird [专家分:0] 发布于 2008-01-25 15:12:00
会其它方法吗,教教我。
我来回复