NYOJ 23题 取石子(一)

刚一看到这道题时,让我想起了“搬山游戏”,但是,拿过那道题一对照,规则明显不同。

对于这道题,关键是站到两个游戏者的角度思考,每个人都想赢,但是,如何才能赢呢?又引出了一个定理“巴什博弈”,即,你如果想打败对方,就要构造一种环境,这种环境就是 每次留给对手(m + 1)的倍数个石子,即(n % (m + 1) != 0),假设,一共20个,每次最多取8个,TT先取,取2个,余下18个,无论对手怎么取,TT总是先取完。(公式:n = (m + 1)r + s, r为任意自然数。)当然,如果,总数N小于M,TT很聪明,为了赢,会取走所有的石子。

“搬山游戏”的规则是,谁最后搬完,谁输。计算机为了赢,所以,1.当剩余山数目-1 <= 可移动的最大数目时,计算机 要搬(剩余山数 - 1)座,以便将最后一座山留给人;2.对于任意x,y,一定有 0 <= x % (y + 1) <= y.在有n座山的情况下,计算机为了将最后一座山留给人,而且又要控制每次搬山的数目不超过最大数k,计算机应搬山数满足:(n - 1)% (k + 1),如果结果为0,即整除无余数,则规定只搬一座山,以防止冒进后发生问题。

程序如下:

NYOJ 23题 取石子(一)_第1张图片

你可能感兴趣的:(NYOJ 23题 取石子(一))