2004/11/30 | FPOI'2003 复赛第三题《猫抓老鼠》答案
类别(信息技术教师) | 评论(0) | 阅读(145) | 发表于 23:36
题目:
松鼠跟黑猫也玩起"胜利大躲藏"的游戏了。在猫儿山上布满了N个没空,黑猫对松鼠说:我对猫儿山上的N个洞都进行了编号(从0号开始到N-1号),然后每隔M个洞穴搜一下,进行"地毯式"搜索,这回你死定了。小松鼠转了转眼珠哼了一声,谁怕谁呀。
小松鼠果真能躲过劫难吗。请你编一程序FPOI3.LGO,帮小松鼠测算一下哪些是可避难的洞穴或者真是死定了。
程序中必须包含主过程FPOI3 :N :M,其中参数:N表示洞穴的个数,:M表示每隔M个洞穴顺时针搜索。运行主过程FPOI3 :N :M,程序输出一组可作为避难的洞穴号数;若无安全避难的洞穴,则输出"KILL!!!"。
例如:
FPOI3 10 3 在作图区中输出结果:KILL!!!
FPOI3 10 4 在作图区中输出结果:1 3 5 7 9

以下为源代码:

;2004年11月30日
;刚才完成了第2题,趁胜追击,也就完成了第3题。
;这次不去考虑什么算法最优化了,基本上确定算法后,穷举,尤其在FOR部分。
;
;
TO FPOI3 :N :M
  DRAW HT
  ;:X表示程序正在判断的洞穴号;:S表示能够避难的洞穴数。
  MAKE "X 0 MAKE "S 0
  PANDUAN :X :N :M
  IF :S=0 PR [KILL!!]
END

TO PANDUAN :X :N :M
  ;如果已经判断到最后一个洞穴,则停止。
  IF :X=:N STOP
  ;:F表示当前洞穴是否被搜索到,值为1表示没事,如果被搜索到,则值变为0。
  MAKE "F 1
  ;检查当前洞穴在第1轮以至第M轮是否被搜索到。
  FOR "I 0 (:M-1)[IF (:X+:I*:N)/:M=INT((:X+:I*:N)/:M) MAKE "F :F*0]
  ;如果未被搜索到,则值仍为1,即输出当前洞穴编号,并设置安全洞穴总数+1。
  IF :F=1 PR :X MAKE "S :S+1
  ;递归调用,当前判断洞穴号+1。
  PANDUAN :X+1 :N :M
END
0

评论Comments

日志分类
首页[624]
网民[85]
转贴手[58]
技术迷[78]
市民[102]
记录者[75]
教育者[32]
数学教师[81]
信息技术教师[29]
读书人[43]
博客[41]