取球博弈.java
来源:互联网 发布:雪橇三傻 知乎 编辑:程序博客网 时间:2024/05/20 20:47
package A类有价值的回顾的;import java.util.Scanner;public class 取球博弈 { private static int[] a = new int[3]; private static int[] bb = new int[5]; private static int f(int b,int myc,int hisc){ //多分支是来源于 用a中的哪个来选择b中的哪个 boolean is0 = false; if(b-a[0] < 0 && b-a[1] < 0 && b-a[2] < 0){//没有能够取到的意思是说,都小于0了 if(myc%2 == 1&& hisc%2 == 0) return 1; if(myc%2 == 1&& hisc%2 == 1) return 0; if(myc%2 == 0&& hisc%2 == 1) return -1; if(myc%2 == 0&& hisc%2 == 0) return 0; } for(int i=0;i<a.length;i++){ if(b-a[i]>=0){//如果没有这里的限制,将会导致本身不能进行的选择进行了 int n = f(b-a[i],hisc,myc + a[i]);//如果不用n,而是用两次f(b-a[i],hisc,myc),重复 if(n == -1) return 1; if(n == 0) is0 = true;//如果对面选择了一个最优化的平局,对你来说你当然并不会满足,就会再往后寻找看一下是否能赢 } } if(is0 == true){ is0 = false; return 0; } //for循环完了,既没有能赢的,也没有能逼平的,只好输了 return -1; } public static void main(String[] args){ boolean is1 = false,is0 = false;//初始化为什么要初始化为TRUE,很奇怪啊你,就像那个没关水龙头的装修工,你TM这不是砸自己的招牌,sbbbbb Scanner sc = new Scanner(System.in);//老子就是要写代码,我能我的快感,那种探索的过程,虽然有粗心这个拦路虎,但是我也不畏惧,每个人都有自己非常有优势的地方,而真正的成功者是能够弥补自己短处的人,因为这个世界上的一件事你的优势只占一部分 for(int i=0;i<a.length;i++){ a[i] = sc.nextInt(); } for(int j=0;j<bb.length;j++){ bb[j] = sc.nextInt(); } for(int k=0;k<bb.length;k++){ int b=bb[k],myc=0,hisc=0; for(int i=0;i<a.length;i++){ if(b-a[i] >= 0){ int n = f(b-a[i],hisc,myc + a[i]); if(n == -1) { is1=true; break; } if(n == 0) { is0=true; continue;} //对面return了-1,你就是胜利的 } } //自己的多次选择分别交给对手处理,根据对手的return,只要能赢就退出,如果平了再看看接下来的有没有能赢的,实在没有只好输了 //你选择了一个最优的,我当然也要选择一个最优的,没什么问题 if(is1 == true){//这里的优先级一定要搞清楚 is1 =false; is0 =false; System.out.print("+ "); } else if(is0 == true){ is0 =false; System.out.print("0 "); }else System.out.print("- "); } }}/* * 取球博弈两个人玩取球的游戏。一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目。如果无法继续取球,则游戏结束。此时,持有奇数个球的一方获胜。如果两人都是奇数,则为平局。假设双方都采用最聪明的取法,第一个取球的人一定能赢吗?试编程解决这个问题。输入格式:第一行3个正整数n1 n2 n3,空格分开,表示每次可取的数目 (0<n1,n2,n3<100)第二行5个正整数x1 x2 ... x5,空格分开,表示5局的初始球数(0<xi<1000)输出格式:一行5个字符,空格分开。分别表示每局先取球的人能否获胜。能获胜则输出+,次之,如有办法逼平对手,输出0,无论如何都会输,则输出-例如,输入:1 2 31 2 3 4 5程序应该输出:+ 0 + 0 -再例如,输入:1 4 510 11 12 13 15程序应该输出:0 - 0 + +再例如,输入:2 3 57 8 9 10 11程序应该输出:+ 0 0 0 0资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 3000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。注意:主类的名字必须是:Main,否则按无效代码处理。*/
阅读全文
0 0
- 取球博弈.java
- 取球游戏_nyoj_518(博弈-蓝桥杯原题).java
- 算法 博弈问题 取球问题 java
- JAVA蓝桥杯(18)取球博弈
- 10.取球博弈
- 取球博弈--蓝桥杯
- 取球游戏【博弈】
- 取球博弈
- 蓝桥杯-取球博弈
- 取球博弈
- 取球博弈
- 取球博弈
- 第七届蓝桥杯java B组省赛 取球博弈
- OJ刷题---取球博弈
- 【蓝桥杯练习题】取球博弈
- 蓝桥杯大赛--取球博弈
- 取球游戏(博弈)
- 取球博弈问题 蓝桥杯
- MyBatis中resultType和resultMap的区别
- java内部类
- Oracle匿名块
- StringBuilder
- mybatis传入List参数或者单个String 参数等问题
- 取球博弈.java
- linux安装jdk1.7
- mybatis自动生成代码
- c#string方法
- android上面netstat -ano | findstr "5037"执行错误:netstat: Unknown option o
- #Udacity#Intro_to_Computer_Science#Study_Note
- 【算法题】工作安排
- Dorado7多选框
- 1057. 数零壹(20) PAT