要说到我个人最喜欢的几种解题方法,那模拟法肯定是其中之一
因为模拟法很简单,很无脑。不用想题想的浑身难受,只需要按照题目要求设定好规则,然后就撒手不管了。就像遗传算法只需要设定好“遗传变异”、“优胜劣汰”的规则,然后怎么进化都是程序的事儿,我们吃瓜就行了
有两种题可能会用到模拟法,一种是很直观的直接告诉你一堆规则 ,然后疯狂暗示就怕你不模拟 的,另一种是藏得比较深而且你不用模拟法也能做的(换句话说就是可以用模拟法偷懒而已)这里举几个典型的例子
例题一:逃跑的蠕虫(青蛙爬井类问题)(很明显可以用模拟法的一类)
题目:
装在瓶子的蠕虫都想从瓶子底部向瓶口处爬出去。它每分钟向上爬行u厘米,之后会休息一分钟,这一分钟它会向下滑行d厘米,当蠕虫到了瓶口或者超出瓶口后便出了瓶口,成功逃离(每分钟计算一次位置)。编写一个函数,帮助蠕虫计算它在什么时候能够爬出瓶子。
输入:
连续输入多个的实例,每一个实例输入三个正整数分别代表n,u和d,其中d < n ,n < 1000,当输入三个0时表明输入停止。
输出:
针对每一个输入实例,计算蠕虫跑出瓶子的时间。
样例输入:
10 2 1
20 3 1
0 0 0
样例输出:
17
19
分析:这题小学生都知道有个坑,但是由于我们懒,所以管他有啥坑哦,只要不T,模拟走起!首先分析,虫有两个动作,一是向上爬,二是向下掉,每个动作分别花1分钟的时间。那好,我就以时间为单位,一分钟一分钟的让程序去推演,每次推演看看虫子爬出去没有,爬出去了就返回推演到了多少分钟就行了,