斐波那契博弈:
每次最少取一个,最多取上次的2倍,
结论:
如果是斐波那契数,则后手赢
如果不是斐波那契数,则先手赢
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f[100];
int main()
{
f[1]=1;
f[2]=1;
ll maxn=1;
int i=3;
for(i=3;maxn<=1e9;i++)//打表斐波那契数列
{
f[i]=f[i-1]+f[i-2];
maxn=f[i];
}
//cout<<i<<endl;//46 //1e9到第46个
int n;
cin>>n;
int flag=1;
for(int i=3;i<=46;i++)
{
if(n==f[i])
{
flag=0;
break;
}
}
if(!flag) cout<<"Sha"<<endl;//是斐波那契数的话就后手赢,否则先手
else cout<<"Xian"<<endl;
return 0;
}