网站模板自助,seo快排公司哪家好,域名防红直连,我做淘宝网站卖东西怎么激活考虑一个简单的游戏#xff1a; 有两个盒子#xff0c;其中一个装有m颗糖、另一个装有n颗糖#xff0c;将这样的状态记为(m,n)。每次的移动是将其中一个盒子清空#xff0c;把另一个盒子的一些糖拿到被清空的盒子里使得两个盒子至少各有一颗糖。两个操作者轮流进行操作 有两个盒子其中一个装有m颗糖、另一个装有n颗糖将这样的状态记为(m,n)。每次的移动是将其中一个盒子清空把另一个盒子的一些糖拿到被清空的盒子里使得两个盒子至少各有一颗糖。两个操作者轮流进行操作不能操作者败。需要判断一个状态是否先手必败。 按照kmn从小到大的顺序进行判断即可。 1 #include cstdio2 // Ferguson打印先手必败状态。3 const int maxn 100;4 int winning[maxn][maxn]; // 1为先手必胜、0为先手必败5 int main(){6 winning[1][1] false; // (1,1)是游戏的唯一终态此时先手必败7 for(int k 3 ; k 20 ; k) // k n m8 for(int n 1 ; n k ; n){9 int m k - n;
10 winning[n][m] false;
11 for(int i 1 ; i n ; i) // 如果之后的存在一个状态是先手必败的
12 if(!winning[i][n - i]) winning[n][m] true;
13 for(int i 1 ; i m ; i)
14 if(!winning[i][m - i]) winning[n][m] true;
15 if(n m !winning[n][m])
16 printf(%d %d\n,n,m);
17 }
18 return 0;
19 } 转载于:https://www.cnblogs.com/cyb123456/p/5812773.html