永发信息网

取棋子问题,请教高手

答案:1  悬赏:30  手机版
解决时间 2021-08-12 05:44
  • 提问者网友:锁深秋
  • 2021-08-11 05:58

此题确实有点难,现在还没有思路,请各位高手解答!
最佳答案
  • 五星知识达人网友:渡鹤影
  • 2021-08-11 06:24

这个取棋问题我写过,还做成了两人网络对战功能


关键是考虑怎样才能获胜。


对于N颗棋子,每次最多取K颗,最少取1颗,谁能取到最后一颗呢?


1) 对于取到最后一颗输的情况下,要让对手取到最后一颗,方法是这样:


设想将N颗棋子分成大小为K的堆,剩余Y颗


如果我在最后剩下K+2颗,对手取K,我取1,对手取K-1,我取2,...就总会把最后一颗留给对手,也就是谁取最后一个K堆里的谁就可以胜出。


具体来说:先求出分成多少堆 X = (N-2)/K ,  余数 Y = (N-2)%K


a. 如果余数Y>2时


分成下面的堆:


Y-2   K    K    K    K    K    K  ....  K    K    2


取棋方法:甲先取Y-2颗,乙随便取m颗,甲取K-m颗 (即从第二次开始甲会和乙取的数凑成K,若乙取K,则甲也取K)


这样,当X为奇数时,先取者输;当X为偶数时,后取者输。


b. 如果余数Y<2时


分成下面的堆:


K+Y-2   K    K    K    K    K    K  ....  K    K    2


取棋方法:甲先取K+Y-2颗,乙随便取m颗,甲取K-m颗 (即从第二次开始甲会和乙取的数凑成K,若乙取K,则甲也取K)


这样,当X为奇数时,后取者输;当X为偶数时,先取者输。


2) 对于取到最后一颗胜出的情况,也和上面一样考虑,只不过输变成赢而已。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯