今盒里有n个小球,A、B两人轮流从盒中取球。
每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个。
两人都很聪明,不会做出错误的判断。
每个人从盒子中取出的球的数目必须是:1,3,7或者8个。
轮到某一方取球时不能弃权!
A先取球,然后双方交替取球,直到取完。
被迫拿到最后一个球的一方为负方(输方)
每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个。
两人都很聪明,不会做出错误的判断。
每个人从盒子中取出的球的数目必须是:1,3,7或者8个。
轮到某一方取球时不能弃权!
A先取球,然后双方交替取球,直到取完。
被迫拿到最后一个球的一方为负方(输方)
编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢?
编写,这种只有赢和输两种局面的博弈问题
使用递归注意一个要点
我取完一定量的球后,让对方去取,对方是赢的话,我一定是输,
对方是输的话我一定是赢。
...这道题已经做过好多类似题了没啥可细说的,即使转动态规划也是最简单的
import java.util.Arrays;
public class Main {
static boolean f(int n){
//0 个球 说明最后一个球肯定被别人取了
if(n==0)return true;
//如果n大于1 我取完一个,问问接下来的球,让他取他能赢不
if(n>=1&&!f(n-1))return true;
if(n>=3&&!f(n-3))return true;
if(n>=7&&!f(n-7))return true;
if(n>=8&&!f(n-8))return true;
//以上情况如果都不成立,说明,我怎么取球都赢不了
return false;
}
public static void main(String[] args){
for(int i=1;i<50;i++){
System.out.println(f(i));
}
}
}