VFP趣味编程:小白兔智斗狐狸

小白兔智斗狐狸。山上有十个洞,每洞之间相距较远,有一只狐狸和一只白兔,住在各自洞里。狡猾的狐狸总想捕捉吃掉白兔。一天二者远远相望,白兔对狐狸说:“把十个洞依次编成 110号,我藏在其中一个洞里,你从你自己住的第 10号洞出发,第一次走一个间隔,进洞找我,第二次走两个间隔找我,第三次走三个间隔找我,依次类推,次数不限。你若能找到我,你就可以饱餐一顿。”狐狸心想,不限次数,它总可以找到这只白兔。如果,从早晨一直找到晚上,也没有寻找到白兔。请算一算白兔可能藏在哪几洞里?

算法分析: 狐狸从第10号洞出发,第一次到1号洞,第二次到3号洞,第三次到6号洞,第四次到10号洞...这是一个有关余数的问题。我们设狐狸寻找的次数为n,则这n次中所走过的间隔数就是s=1+2+3+..+N=N(N-1)/2,因为走完10个间隔就转了一圈,所以寻找第n次时进入了哪个洞,就相当于求s除以10所得的余数。我们不妨把10个洞编上0,1,2,3..9这十个号码,狐狸的第10号洞就用0号表示。源程序ex12_1.prg如下:



SET TALK OFF
CLEA
DIME m(
10 )
INPUT 
" 请输入狐狸寻找的次数: "  TO N
FOR i
= 1  TO  10
  m(i)
= 0
ENDFOR
k
= 0
i
= 1
DO WHILE i
<= N
  k
= k + i
  l
= k - INT(k / 10 ) * 10
  IF l
= 0
    m(
10 ) = m( 10 ) + 1
    i
= i + 1
    LOOP
  ENDIF
  m(l)
= m(l) + 1
  i
= i + 1
ENDDO
FOR i
= 1  TO  10
  
?   " 狐狸进入第 " + STR(i, 2 ) +  ;
    
" 个洞的次数为 " + STR(m(i))
ENDFOR
?
?   " 狐狸没有进入过的洞是: "
FOR i
= 1  TO  10
  IF m(i)
= 0
    
??  STR(i, 3 )
  ENDIF
ENDFOR
RETU

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在某个山上有n个一只狐狸一只兔子,这n个呈圆周形排列,分布在山的周围,每个之间有一定的距离。狐狸当然成天想着捉吃兔子一饱口福。 有一天,狐狸看见了兔子正想去追,兔子望见了狐狸,说道:“哎,兄弟,你每天这么辛苦地追我赶我,累不累啊,要不这样吧,我们玩个游戏,按游戏规则,如果我被你捉到了,我就甘愿成为你的美餐,如何?”,狡猾的狐狸想:“这正合我意,以我的聪明,难道斗不过你兔子!”,回道:“好呀,你说怎么个玩法?愿赌者服输,一言未定!”。兔子说:“这样吧,我的分布在山上,正好是一个圈,我把这n个依次编成1至n号,游戏开始时,你从第n号出发,沿着一个方向找我,我一定在某个洞里,并且我始终不能动,等着你来吃我!你第一次走一个间隔(相邻的两之间为一个间隔),进入1号寻找,如果我不在此,第二次走2个间隔,进3号寻找我,如果我不在此,依此类推,次数不限,如果我被你找到了,你就甘愿成为你的美餐,如何?。狐狸心想,不限次数,只要我努力找,总可以找到小白兔的。结果狐狸找呀找呀,找了三天三夜,有努力地找了四天四晚,也没有找到小白兔。 现在请你帮小白兔一个忙,如果给定的个数n,它应该躲在哪些洞里才是永远安全的,也就是说永远不会被狐狸找到呢?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值