回 帖 发 新 帖 刷新版面

主题:狐狸兔子问题

问题这样的:围绕着山顶有10个洞,一只兔子和一只狐狸各住一个洞,狐狸总想吃掉兔子。一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10。你从第10号洞出发,先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数不限。若能找到我,你就可以饱餐一顿,在没找到我之前不能停止。狐狸一想只有10个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件。结果就是没找着。
  利用单链环编程,假定狐狸找了1000次,兔子躲在哪个洞里才安全。

我这样编:var
a:array[0..9] of 0..1;
i,n:integer;
begin
n:=0;
for i:=0 to 9 do
a[i]:=1;
for i:= 1 to 1000 do
begin
a[n+i]:=0;
n:=n+i;
if n>10
then n:=n-10;
end;n:=0;
for i:=0 to 9 do
if a[i]<>0
then
write(i+1)
end.

但运行后显示:Error 0:runtime error
这是什么问题......

回复列表 (共8个回复)

沙发

没有RuntimeError:0的,你确认它真的这样显示?

板凳

这里出了问题~
for i:= 1 to 1000 do
begin
a[n+i]:=0;
n:=n+i;//设想一下当i=500时会怎么样~
if n>10//就会满足这个条件
then n:=n-10;//N减掉10,但N还是大于10呀~~N应该有400多
end;//下一次跳回到数组那个地方就出问题了,数组没有这么多项~呵呵~~这道题我有解过.~~表忘了加分哟~~

3 楼

这要看他用的什么编绎的,软件不一样,报出来的错误信息也不一样~

4 楼

我把n:=n-10;改成n:=n mod 10;
但运行后显示:
turbo pascal 7.0
NTVDM CPU 遇到无效的指令.
CS:1700 IP:faOd OP:df 48 fd 00 04 选择"关闭"终止应用程序.
        
         关闭(C)   忽略(I)

5 楼

可能是TP有问题~
但是你的程序还是有问题~
当N=10的情况会怎么样,你自己看看~

6 楼

其实这题以前有人贴过了我是这么做的:
program tuzi;
const n=10;
var
   i,j:integer;
   a:array[1..n] of boolean;
begin
   for i:=1 to n do a[i]:=true;
   j:=0;
   for i:=1 to 1000 do
    begin
       if (i mod 10=0) then a[10]:=false
           else a[i mod n]:=false;
       j:=j+1;
       i:=j+i;
    end;
   for i:=1 to 10 do
        if a[i] then write(i:3);
   readln;
end.

7 楼

当时楼主是这样做的
program tuzi;
const n=10;
var
   i,j,k:integer;
   a:array[0..9]of boolean;
begin
     for i:=1 to n do a[i]:=false;
     i:=2;
     while i<=9 do
     begin
          a[i]:=true;
          j:=1;
          k:=1;
          while (not a[j])and(k<=999) do
          begin
               k:=k+1;
               j:=(j+k)mod n;
          end;
          a[i]:=false;
          if k=1000 then writeln(i);
          i:=i+1;
     end;
     readln
end.

8 楼

呵呵```口口的做法和我当时做的时候差不多哦``

我来回复

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