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");
}
}
}