1.巴什博弈,在一堆东西n中取1~m个,不能不取,最后取完的人赢,只要n不是m+1的整数倍都能赢,
bool (int n,int m)
{
if(n%(m+1)==0) return false;
return true;
}
2.Nim博弈,n堆东西中取,每次取任意个,最后取完的人赢,这个需要亦或处理,若全部值亦或为0则必输,不为0则必赢;
然后只需要,将大于亦或值位数最高的任意一组,变成与亦或值亦或就可以了;
3斐波那契博弈,有一堆物品,两人轮流取物品,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上一次取的物品数的二倍且至少为一件,取走最后一件物品的人获胜。
如果是斐波那契数列中的值,则第二个人赢,否则第一个人赢;
ll a[100];
a[0]=1,a[1]=2;
for(int i=2;i<=50;i++)
a[i]=a[i-1]+a[i-2];
ll n;
cin>>n;
if(n==0)return 0;
for( i=1;i<=46;i++)
{
if(a[i]==n)
break;
}
if(i<47)
cout<<"Second win"<<endl;
else
cout<<"First win"<<endl;