主题:狐狸兔子问题
绿步甲
[专家分:1610] 发布于 2005-08-09 14:40:00
问题这样的:围绕着山顶有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个回复)
沙发
lzl1403 [专家分:1670] 发布于 2005-08-09 22:20:00
没有RuntimeError:0的,你确认它真的这样显示?
板凳
口口and枕头 [专家分:1550] 发布于 2005-08-09 23:53:00
这里出了问题~
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 楼
口口and枕头 [专家分:1550] 发布于 2005-08-09 23:56:00
这要看他用的什么编绎的,软件不一样,报出来的错误信息也不一样~
4 楼
绿步甲 [专家分:1610] 发布于 2005-08-10 11:51:00
我把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 楼
口口and枕头 [专家分:1550] 发布于 2005-08-10 15:05:00
可能是TP有问题~
但是你的程序还是有问题~
当N=10的情况会怎么样,你自己看看~
6 楼
口口and枕头 [专家分:1550] 发布于 2005-08-10 15:08:00
其实这题以前有人贴过了我是这么做的:
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 楼
口口and枕头 [专家分:1550] 发布于 2005-08-10 15:09:00
当时楼主是这样做的
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 楼
MagicG [专家分:650] 发布于 2005-08-11 09:39:00
呵呵```口口的做法和我当时做的时候差不多哦``
我来回复