java实现的海盗算法优化版
2017-07-14 09:02
816 查看
本文实例讲述了java实现的海盗算法。分享给大家供大家参考,具体如下:
前面介绍了《C#实现的海盗分金算法》,这里再给出一个Java优化版的算法:
package unit4; public class Pirate{ private String name; private int[] schemes; private int index; public Pirate(int t,int i) { name="unknow"; index=i; schemes=makeSchemes(t); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex(){return index;} public int[] getSchemes() {return schemes;} public int handvote(int table[]) { return myhandvote(table,index); } private int myhandvote(int []t,int i) { if(t[i]==0) return 0; if(i==1) return 0; return 1; } public int[] makeSchemes(int t) { int vote=0; schemes =new int[t-index]; do{ for(int i=0;i<schemes.length;i++){ schemes[i]=(i+1)%2; } for(int i=0;i<schemes.length;i++){ vote=vote+myhandvote(schemes,i); } }while(!(2*vote>t/2)); return schemes; } }
package unit4; public class Judger { int[] allot; Pirate[] pirates; public Judger(Pirate []pirates,int[]a) { this.pirates=pirates; allot=a; } public int[] getAllot() { return allot; } public void setAllot(int[] allot) { this.allot = allot; } public Pirate[] getPirates() { return pirates; } public void setPirates(Pirate[] pirates) { this.pirates = pirates; } public boolean evaluate(){ int vote=0; for(int i=0;i<pirates.length;i++){ vote+=pirates[i].handvote(allot); } if(2*vote>=pirates.length) return true; else return false; } }
package unit4; public class MaxInterest { public static void main(String[] args) { int piratecounts=5; Pirate[]pirates=new Pirate[piratecounts]; for(int i=0;i<piratecounts;i++){ pirates[i]=new Pirate(piratecounts,i); pirates[i].setName("name"+i); } int[]table =pirates[0].getSchemes(); Judger ajudge=new Judger(pirates,table); if(ajudge.evaluate()){ int[]scheme=ajudge.getAllot(); for(int i=0;i<scheme.length;i++) System.out.println(" "+scheme[i]); } } }
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- 两个浮点相关算法的java实现(海盗拼酒,1/6的100位)
- Java实现POP3服务器
- 用Java实现多线程服务器程序
- 用JAVA实现Undo、Redo,Copy、Paste、Cut
- 用Java实现的设计模式系列(2)-Prototype
- http断点续传简单实现(java)
- 用Java实现的设计模式系列(3)--Builder
- 使用 .NET实现JavaTM Pet Store J2EETM 蓝图应用程序
- 在Java程序,如何实现自适应位置的快捷菜单
- 用Java实现的设计模式系列(1)-Factory
- Java.NET --一个基于Java的Microsoft.NET框架的实现
- 利用Java实现zip压缩/解压缩
- Java Tip: 用Reflection实现Visitor模式
- 在java中实现对FORM的打印功能
- Java中利用散列表实现股票行情的查询
- 用Java实现Web服务器 HTTP协议
- 使用Java实现数据报通讯过程
- 在Java applet中如何实现一个模式对话框?
- Java实现时间日期格式转换示例
- dom规范和java中的实现(二)