回 帖 发 新 帖 刷新版面

主题:[讨论]猴子问题。链表法怎么处理?????

[b][b][i]有M只猴子围成一圈,每只各一个从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M、N,编程计算哪一个编号的猴子成为大王 
[b][/b][/i][/b][em10][em10][em10][em10][em10][/b]

回复列表 (共5个回复)

沙发

Jonseph
随便一找就N多代码,请自行搜索

板凳

做个循环链表就行了撒..

3 楼

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 楼

怎么样?看得懂吗?把两个过程拿出来手算一下就知道了。

5 楼

会其它方法吗,教教我。

我来回复

您尚未登录,请登录后再回复。点此登录或注册