题意:给你n个石头, Tang 和 Jiang依次轮流来拾取, 每次拿的数量为[ 1~k ], 最后谁拿完的谁输掉比赛。
首先考虑种特殊情况, 当n%(k+1) == 1时, 不管每次Tang拿多少(数量为x),Jiang拿(m+1-x), 最后轮到Tang的时候就只剩下一个, 所以必定是Jiang赢。
其余的情况时(n%(k+1) != 1), Tang先从 n中拿出部分, 使得剩下的模上(k+1)等于1, 然后这又变成上面的情况, 不过变成Jiang在前面, Tang在后面, 此时必定是Tang赢。
#include<cstdio>
#include<iostream>
using namespace std;
int main(void)
{
int n, k;
while(scanf("%d%d",&n,&k), n||k)
{
if(n%(k+1) == 1)
printf("Jiang\n");
else
printf("Tang\n");
}
return 0;
}
本文介绍了一种简单的博弈论游戏算法实现,通过分析游戏规则,得出Tang和Jiang两人在特定规则下如何决定胜负的结论。当剩余石头数量模(k+1)等于1时,Jiang将获胜;否则Tang将获胜。
2055

被折叠的 条评论
为什么被折叠?



