码迷,mamicode.com
首页 > 其他好文 > 详细

博弈论之威佐夫博弈

时间:2016-08-20 11:42:18      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

威佐夫博弈(Wythoff Game):

  有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后两堆物品都取完者得胜。

结论 :

  设两堆物品初值为 (x,y) 且 x>y ;

  令 z = floor((sqrt(5.0)  + 1) / 2.0) * (x - y);

 

  若 w == y,则后手必胜 , 否则先手必胜;

 

参考了(威佐夫博弈详解)http://blog.csdn.net/y990041769/article/details/21694007

 

code :  

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 //define swap(x,y) x ^= y , y ^= x , x ^= y;
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int x , y , z;
10     while(~scanf("%d%d",&x,&y))
11     {
12         if(x < y)  
13             swap(x,y) ;
14         z = floor((sqrt(5.0) + 1) / 2.0)*(x - y));
15         if(z == y) 
16             printf("后手必胜\n");
17         else 
18             printf("先手必胜\n");
19     }
20 return 0;
21 }    

 

博弈论之威佐夫博弈

标签:

原文地址:http://www.cnblogs.com/x-1204729564/p/5789809.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!