文章目录[隐藏]
易语言采用筛选法猫捉老鼠。所谓筛选法就是从全集中将不合格的项全部删去,剩下的就是答案。
30个只老鼠围成一圈,花猫从第一只开始数,数到5或5的倍数就吃掉,问最有后一个吃掉的应该是站在地几个位置上的老鼠?
这是个经典问题,解法就是模拟整个过程,有点类似于循环队列。
另外,为了程序上处理方便,可以假定所有老鼠都被吃掉,然后看一下最后一个被吃掉的是谁。另一处为了处理方便而采取的措施是pos的初始值设为-1.很多时候,对问题的问法稍作变动,或者将初始值、加减变量的位置稍作调整,用程序处理起来会方便很多。
易语言源码
窗口组件,一个编辑框输入老鼠数量,一个输入开始位置,一个列表框显示结果,一个开始按钮。
.版本 2
.子程序 _计算图形按钮_被单击
.局部变量 数组, 逻辑型, , "0"
.局部变量 变量1, 整数型
.局部变量 老鼠数量, 整数型
.局部变量 老鼠剩余数量, 整数型
.局部变量 变量3, 整数型
.局部变量 变量4, 整数型
.局部变量 变量5, 整数型
.局部变量 次数变量, 整数型
老鼠数量 = 到数值 (老鼠数量编辑框.内容)
.如果真 (老鼠数量 ≤ 0 或 到数值 (数编辑框.内容) ≤ 0)
信息框 (“数量或数不能小于1!”, #错误图标, “出现错误了!”)
返回 ()
.如果真结束
' 初始化变量
重定义数组 (数组, 假, 到数值 (老鼠数量))
' 把老鼠数量给老鼠剩余数量
老鼠剩余数量 = 老鼠数量
显示列表框.清空 ()
.判断循环首 (老鼠剩余数量 > 0)
变量3 = 1
.判断循环首 (变量3 < 到数值 (数编辑框.内容) + 1)
变量4 = 变量4 + 1
.如果真 (变量4 = 老鼠数量 + 1)
变量4 = 1
.如果真结束
' 老鼠还未被吃掉
.如果真 (数组 [变量4] = 假)
变量3 = 变量3 + 1
.如果真结束
.判断循环尾 ()
数组 [变量4] = 真
' 剩余老鼠数减一
老鼠剩余数量 = 老鼠剩余数量 - 1
次数变量 = 次数变量 + 1
显示列表框.加入项目 (“第” + 到文本 (次数变量) + “次吃掉的位置:” + 到文本 (变量4), )
.判断循环尾 ()
显示列表框.现行选中项 = 显示列表框.取项目数 () - 1
标签1.标题 = “最后吃掉的位置是:” + 到文本 (变量4)