威佐夫博弈 :是指的这样一个问题:有两堆各若干个物品,两个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多的物品,规定每次至少取一个,至多不限,最后取光者胜利。
威佐夫博弈的证明可以去网上搜索。
如果出现奇异局势,那么先手必输。例如:(0,0),(1,2),(3,5),(4,7),(6,10)…… 这种局势就称为奇异局势 ,他们的差值是递增的,这些局势的第一个值是在前面未出现过的最小自然数,奇异局势的第一个值总是等于差值乘以1.618.
上题就是一道威佐夫博弈裸题
1.618 = (1+sqrt(5.0)/2;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a>b)
swap(a,b);
int t;
double x=(1+sqrt(5.0))/2;
double c=(double)b-a;
t=(int)(x*c);
if(a==t)
printf("0\n");
else
printf("1\n");
}
return 0;
}

本文深入探讨了威佐夫博弈的规则与策略,这是一种经典的两人博弈游戏,涉及到数学中的差值序列和奇异局势概念。文章提供了理解游戏核心原理的方法,并通过代码示例展示了如何判断任意局势下先手玩家的胜负。
1294

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



