24点小游戏利用深度搜索设计

Poker.class


public class Poker {

private String pokers;

private boolean flag;


public Poker(String pokers){

this.flag = false;

setPokers(pokers);

}

public String getPokers() {

return pokers;

}


public void setPokers(String pokers) {

if("A".equals(pokers)){

this.pokers = "1";

}

else if("J".equals(pokers)){

this.pokers = "11";

}

else if("Q".equals(pokers)){

this.pokers = "12";

}

else if("K".equals(pokers)){

this.pokers = "13";

}else{

this.pokers = pokers;

}

}


public boolean isFlag() {

return flag;

}


public void setFlag(boolean flag) {

this.flag = flag;

}

}



Algorithm.class

import java.util.List;



public class Algorithm {

public static boolean isFinish = false;

Operators operator = Operators.getInstance();

public void dfs(List<Poker> pokerList,int num,double count,String ans){

//当24点并且使用了4张牌之后表示成功

if(isFinish){

return ;

}

if(4==num&&24==count){

System.out.println(ans);

System.out.println("Done!!!!!!!!!!!!!!!!!!!!!!");

System.out.println("");

isFinish = true;

return ;

}

//因为每个牌组都有可能存在很多组合所以需要标记是否找到一个组合就可以

//确保每张牌都使用过

for(int i=0;i<pokerList.size();i++){

Poker p = pokerList.get(i);

//选择没使用的牌

if(!pokerList.get(i).isFlag()){

//判断小鬼和大鬼

if("joker".equals(p.getPokers())||"JOKER".equals(p.getPokers())){

System.out.println("ERROR  \n");

return ;

}

//加法

p.setFlag(true);

if(ans!=""&&ans!=null){

dfs(pokerList,num+1,operator.plus(count,Double.valueOf(p.getPokers())),ans+"+"+p.getPokers());

}else

{

dfs(pokerList,num+1,operator.plus(count,Double.valueOf(p.getPokers())),ans+p.getPokers());

}

if(num>0){

//减

dfs(pokerList,num+1,operator.minus(count,Double.valueOf(p.getPokers())),ans+"-"+p.getPokers());

//乘

dfs(pokerList,num+1,operator.multiplication(count,Double.valueOf(p.getPokers())),ans+"*"+p.getPokers());

//除

dfs(pokerList,num+1,operator.division(count,Double.valueOf(p.getPokers())),ans+"/"+p.getPokers());

}

p.setFlag(false);

}

}

if(isFinish){

return ;

}

}

}



Operators.class


public class Operators {

private static Operators instance;

private Operators(){

}

//防止过多地新建实例消耗内存,使用单例模式

public static Operators getInstance(){

if(null == instance){

instance = new Operators();

}

return instance;

}

public double plus(double a,double b){

return a+b;

}

public double minus(double a,double b){

return a-b;

}

public double multiplication(double a,double b){

return a*b;

}

public double division(double a,double b){

return a/b;

}

}



Test24.class

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;




public class Test24 {

public static void main(String[] args) {
int num = 0;
double count = 0;
String ans = "";
List<Poker> pokerList = new ArrayList<Poker>();
Scanner in=new Scanner(System.in);

for(int i=0;i<4;i++){
Poker p = new Poker(in.next());
pokerList.add(p);
}
Algorithm a = new Algorithm();
if(null!=pokerList.get(0)){
}
a.dfs(pokerList, num, count, ans);
if(!Algorithm.isFinish){
System.out.println("None");
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值