取棋子问题,请教高手
答案: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) 对于取到最后一颗胜出的情况,也和上面一样考虑,只不过输变成赢而已。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯