题目大意:
给出两个数,每次用大的数减去小的数的正整数倍
将小的数变为0者获胜
设两个数为a,b(a>=b)
则必胜态为a%b==0
当b<a<2*b时,下一个状态只能是b,a-b
一直反复下去则有一人先到必胜态
当a>=2*b时,先手可以让下一个状态到达b,a%b或者a%b+b,b
这两个状态之中一定有一个是必胜态一个是必败态
由于先手很聪明,所以先手一定可以走到必胜态
#include <stdio.h>
int main()
{
int a,b,t,flag;
while(scanf("%d%d",&a,&b)&&(a||b))
{
flag=1;
if(a<b)
t=a,a=b,b=t;
while(a%b!=0&&a<2*b)
{
a=a-b;
t=a,a=b,b=t;
flag=-flag;
}
if(flag==1)
printf("Stan wins\n");
else
printf("Ollie wins\n");
}
return 0;
}
探讨了在特定数学条件下,玩家如何通过策略选择确保胜利的博弈论问题,揭示了胜负之间的数学逻辑。
2175

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



