java实现24点_JAVA实现24点

/*** Witontek.com.

* Copyright (c) 2012-2016 All Rights Reserved.*/

packagecom.sutong.wechat.demo;importjava.util.ArrayList;importjava.util.List;importnet.sourceforge.jeval.EvaluationException;importnet.sourceforge.jeval.Evaluator;/***

*@authorxiaolong.ma

*@version$Id: Card24.java, v 0.1 2016年8月19日 下午3:33:37 xiaolong.ma Exp $*/

public classCard24 {/***

*@paramargs

*@throwsEvaluationException*/

public static void main(String[] args) throwsEvaluationException {

Card24 c= newCard24();

c.cards= "4,5,6,7";

System.out.println(c.calc());

}/*** Getter method for property cards.

*

*@returnproperty value of cards*/

publicString getCards() {returncards;

}/*** Setter method for property cards.

*

*@paramcards value to be assigned to property cards*/

public voidsetCards(String cards) {this.cards =cards;

}privateString cards;private List tempList = new ArrayList();private List opList = new ArrayList();private List cardList = new ArrayList();public String calc() throwsEvaluationException {//a1,a2,a3,a4//

//先排列全//然后,o1,o2,o3 进行排列//最后,括号//(a1,a2)(a3,a4)//a1,a2,a3,a4//(a1,a2)a3,a4//(a1,a2,a3)a4

String[] arrs= cards.split("\\D");if (arrs.length != 4) {return "必须为4位";

}//1.全排列

permCard(arrs, 0, 3);

String[] ops= { "+", "-", "*", "/"};

permOp(ops,0, 3);

Evaluator eval= newEvaluator();for (int i = 0; i < cardList.size(); i++) {

String[] ta=cardList.get(i);for (int j = 0; j < opList.size(); j++) {

String[] to=opList.get(j);

List list =create(ta, to);for(String s : list) {//Object result = fel.eval(s);

String s24=eval.evaluate(s);float l24 =Float.parseFloat(s24);if (l24 == 24) {returns;

}

}

}

}return "没有算出来。。";

}//全排列

public void permCard(String[] buf, int start, intend) {if (start == end) {//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可

for (int i = 0; i <= end; i++) {//System.out.print(buf[i]);

tempList.add(buf[i]);

}//System.out.println();

String[] newBuf = new String[4];for (int i = 0; i < tempList.size(); i++) {

newBuf[i]=tempList.get(i);

}

cardList.add(newBuf);

tempList.clear();

}else {//多个字母全排列

for (int i = start; i <= end; i++) {

String temp= buf[start];//交换数组第一个元素与后续的元素

buf[start] =buf[i];

buf[i]=temp;

permCard(buf, start+ 1, end);//后续元素递归全排列

temp= buf[start];//将交换后的数组还原

buf[start] =buf[i];

buf[i]=temp;

}

}

}//取操作符

public void permOp(String[] buf, int start, intend) {

String[] opArr= { "+", "-", "*", "/"};for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {for (int k = 0; k < 4; k++) {

String[] newBuf= new String[3];

newBuf[0] =opArr[i];

newBuf[1] =opArr[j];

newBuf[2] =opArr[k];

opList.add(newBuf);

}

}

}

}//增加括号

private Listcreate(String[] ta, String[] to) {//a1,a2,a3,a4//(a1,a2)a3,a4//(a1,a2,a3)a4//(a1,a2)(a3,a4)

List list = new ArrayList();

list.add(ta[0] + to[0] + ta[1] + to[1] + ta[2] + to[2] + ta[3]);

list.add("(" + ta[0] + to[0] + ta[1] + ")" + to[1] + ta[2] + to[2] + ta[3]);

list.add("(" + ta[0] + to[0] + ta[1] + to[1] + ta[2] + ")" + to[2] + ta[3]);

list.add("(" + ta[0] + to[0] + ta[1] + ")" + to[1] + "(" + ta[2] + to[2] + ta[3] + ")");returnlist;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值