有什么办法解决猫捉老鼠的问题?
列举这类问题的两种情况。对于每种情况,先考虑特殊情况,再从中寻找规律。这两种情况都是基于以下前提:从1到N的N只老鼠顺时针形成一个圆圈,从1开始报数。并且规定游戏开始第一个幸存者是老鼠1。设老鼠总数为n,最后存活的老鼠数为x。
例1:1号老鼠活了下来,2号老鼠被猫吃了;三号老鼠活了下来,四号老鼠被猫吃了...就这样,猫每隔一只老鼠就吃掉一只老鼠,那么最后存活的老鼠是什么?
这种情况下,猫每次吃两只老鼠中的一只老鼠,可以认为两只老鼠是一个循环,用m = 2表示;用n代表每个周期吃掉的老鼠数量,其中n=1。
例2:1号鼠存活,2号、3号鼠被猫吃掉;4号老鼠活了下来,5号和6号老鼠被猫吃了...就这样,猫每隔一只老鼠就吃掉另外两只老鼠,依次走下去。最后存活的老鼠是什么?
这种情况下,猫每次吃三只老鼠中的两只,可以认为三只老鼠为一个循环,即m = 3;每三个吃两个,所以n=2。
回答:
通过观察上述两种情况的运算结果,发现n的所有可能值按一定顺序排列形成一个等差数列a .第一项a1 = m,容差d = n(m和n都是正整数)。
对应于n的x的值构成几个等差数列B1,B2,...,Bk。这些等差数列的容差都是m,第一项是1。还发现这些等差数列有这样一个规律:当n的值为MK(M和K都是正整数)时,对应的X的值为1。也就是说,当N的取值范围是从mk到mk+1-N时,X的对应值构成一个d=m,a1=1的等差数列,项数是从N=mk到N = mk+1-N的数(包括mk和MK)。
那么现在我们来看看一般情况:如果猫要吃掉m只老鼠中的n只老鼠,那么最后存活的老鼠是什么?从以上结论,我们可以得出以下步骤:
1.先求一个小于n的最大数MK(k为正整数,假设n≠MK);
2.这样就形成了第一项A1 = MK,最后一项An = N,容差D = N的等差数列A,通过公式计算出项数B;(即b = 1+(n-MK)/n)
3.因为X的每一个值也构成了A对应的等差数列Bk,其中容差为m,第一项为1,项数为b..利用等差数列求末项的公式,求出了末项An。
(即an=1+(b-1)*m)
4.an是x对应n的值,n是最后存活的老鼠的数量。