博弈

http://acm.hdu.edu.cn/showproblem.php?pid=2516

 1 斐波那契博弈
 2 判断这个数是不是斐波那契额数就可以,如果是,则后手必赢,如果不是可以分解成多个斐波那契数,则先手必赢
 3 
 4 
 5 import java.util.Scanner;
 6 
 7 public class Main{
 8     public static void main(String[] args) {
 9         Scanner cin = new Scanner(System.in);
10         long[]f = new long[50];
11         f[0] = 1;
12         f[1] = 1;
13         for(int i = 2;i<50;i++)
14             f[i] = f[i-1]+f[i-2];
15         int a;
16         while(true){
17             a = cin.nextInt();
18             if(a==0)
19                 break;
20             boolean flag = false;
21             for(int i = 0;i<50;i++)
22                 if(a==f[i]){
23                     flag = true;
24                     break;
25                 }
26             if(flag)
27                 System.out.println("Second win");
28             else 
29                 System.out.println("First win");
30         }
31     }
32 }
 1 /***
 2  * Wythoff博弈入门
 3  * 这个博弈关键是在与判断,m,n是不是奇异局势
 4  * 如果是奇异局势的话,那么先手必赢
 5  * 所谓奇异局势也就是说当j = m*(sqrt(5)-1)/2
 6  * 且 a == j*(sqrt(5)+1)/2
 7  * 如果m == a&&n ==a+j的话,这是一个奇异局势
 8  * 或则当a = (j+1)*(sqrt(5)+1)/2时
 9  *  m==a&&n==a+j+1时,也是奇异局势
10  */
11 import java.util.Scanner;
12 
13 public class Main {
14     public static void main(String[] args) {
15         Scanner cin = new Scanner(System.in);
16         int m, n;
17         double eps1 = (Math.sqrt(5) - 1) / 2;
18         double eps2 = (Math.sqrt(5) + 1) / 2;
19         while (cin.hasNext()) {
20             m = cin.nextInt();
21             n = cin.nextInt();
22             if (m > n) {
23                 int c = m;
24                 m = n;
25                 n = c;
26             }
27             int j = (int) (m * eps1);
28             int a = (int)(eps2 * j);
29             int b = (int)(eps2 * (j+1));
30             boolean flag = false;
31             if (m == a && n == a + j)
32                 flag = true;
33             if (m == b && n == b + j + 1)
34                 flag = true;
35             if (flag)
36                 System.out.println("0");
37             else
38                 System.out.println("1");
39         }
40     }
41 }
原文地址:https://www.cnblogs.com/Tree-dream/p/6985412.html