信息学奥赛一本通1218.取石子游戏
题解
解析
这道题目很有意思,是一道思维题!!!
虽然它是一道思维题,但难度也不小。
上题目
有两堆石子,两个人轮流去取。每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢。
比如初始的时候两堆石子的数目是25和7。
25 7 --> 11 7 --> 4 7 --> 4 3 --> 1 3 --> 1 0
选手1取 选手2取 选手1取 选手2取 选手1取
最后选手1(先取的)获胜,在取的过程中选手2都只有唯一的一种;
排除a and b都等于零的情况和a<b的情况以外都交给aa
aa
if(x/y>=2||x==y)
return true;
else
return !aa(y,x-y);
递归不必多说,上代码
代码
AC代码 #include<bits/stdc++.h>
using namespace std;
bool aa(long long,long long);
int main()
{
long long a,b;
while(cin>>a>>b)
{
if(a0||b0)
return 0;
if(b>a)
swap(a,b);
if(aa(a,b))
cout<<"win\n";
else
cout<<"lose\n";
}
return 0;
}
bool aa(long long x,long long y)
{
if(x/y>=2||x==y)
return true;
else
return !aa(y,x-y);
}
完结!!!!!!
浙公网安备 33010602011771号