回 帖 发 新 帖 刷新版面

主题:[讨论]一道单链环的题目,谁来帮找错

围绕着山顶有10个洞,一只兔子和一只狐狸各住一个洞,狐狸总想吃掉兔子。一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10。你从第10号洞出发,先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数不限。若能找到我,你就可以饱餐一顿,在没找到我之前不能停止。狐狸一想只有10个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件。结果就是没找着。 
 利用单链环编程,假定狐狸找了1000次,兔子躲在哪个洞里才安全。 
type pointer=^code;
     code=record
      key:integer;b:boolean;next:pointer;
     end;
var m,i:integer;head,p:pointer;
  procedure zhao(n:integer);
  var t:integer;
  begin
    t:=2;head^.b:=false;
    while t<n do
     begin for i:=1 to t do p:=head^.next;p^.b:=false;t:=t+1;end;
  end;
begin
  writeln('input ci shu:');readln(m);new(head);p:=head;
  for i:=1 to 10 do
    begin p^.key:=i;p^.b:=true;if i<>10 then p:=p^.next else head:=p^.next;
    end;
  zhao(m);p:=head;
  for i:=1 to 10 do
     begin if p^.b=true then writeln(p^.key);end;
readln;end. 

回复列表 (共5个回复)

沙发

看来你的指针没学好啊,程序错误很大啊
1.主程序中的第一个for 语句意思就是给10个洞编号,看你这个语句"if i<>10
then p:=p.next else head:=p^next",先模拟i=1 时的情况,一开始p指向head域,head域中的key,b都已有值,惟有next没有值,而你却执行"p:=p^next",也就是让p指向head
域中的next,next没有值,怎么指向???再看"else head:=p^next",这个语句会造成头指针地址丢失,就算你能建立一个完整的链表这个语句会使整个链表被破坏应该是"p^.next:=head"
2.~~~~~头晕了,不说了,我帮你编一个吧:
program fox;
type point=^node;
     node=record
     date:integer;
     next:point;
     end;
var head:point;
procedure creat(var head:point);
var p,q:point;
    i:integer;
begin
  new(p); head:=p; p^.date:=1; q:=p;
  for i:=2 to 10 do
  begin
    new(p); p^.date:=i; q^.next:=p; q:=p; end;
    q^.next:=head;
end;
procedure found(var head:point);
var p:point; m,n:integer;
begin
  m:=1; p:=head;
  repeat
  n:=0;
  repeat
    p:=p^.next;
    n:=n+1;
    until n=m+1;
    p^.date:=0;
    m:=m+1;
    until m=1000;
  end;
  procedure printf(head:point);
  var p:point; n:integer;
begin
  p:=head;
  for n:=1 to 10 do
  begin
     if p^.date>0
     then write(p^.date:6);
     p:=p^.next;
     end;
     writeln;
  end;
  begin
    creat(head);
    found(head);
    printf(head);
  end.
调试了通过,安全的洞是2 4 7 9

板凳


非常感谢!我是初学指针,还没有理解好,见笑了,我一定会努力的!

3 楼

约瑟夫环

4 楼

不要假设1000次,而是判断当狐狸又到了第一个洞抓兔子,而且跳过的洞数mod总数=0

5 楼

这好像是冬令营的题

我来回复

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