一. 题目要求
24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。
二. 题目分析
穷举4个整数的所有可能表达式,然后对表达式求值。
表达式求值: exp=(exp|num) operator (exp|num)
将四个数字的运算分解为两两运算,选择两个数运算的结果作为一个新数字和另一个数字进行运算,直至四个数都参与运算。
三. 流程设计
四. 算法实现
import java.util.ArrayList;
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rd =new Random();
Thinker ti = new Thinker();
//随机生成10种数据求符合要求的表达式
for(int j=1;j<11;j++){
ArrayList<Integer> card = new ArrayList<Integer>();
System.out.println("第"+j+"组数据为:");
int t;
for (int i = 0; i < 4; i++) {
t = rd.nextInt(13)+1;
card.add(t);
System.out.print(t+" ");
}
System.out.println();
ti.count(card, card.size() - 1, 24);
System.out.println();
}
}
}
// 输出表达式类
class Expression {
ArrayList<Integer> num = new ArrayList<Integer>();
ArrayList<String> sign = new ArrayList<String>();
// 重载add()方法对集合增加元素
void add(int n) {
num.add(n);
}
void add(String str) {
sign.add(str