游戏介绍:
24点游戏玩法很简单,一副扑克去掉花牌(J、Q、K、大小王),剩余的40张任意抽选4张,通过加减乘除计算出24点。
算法思路:
需要有递归的思想,在这里我就不介绍递归了,不了的可以去了解了解。
下面介绍我的算法思路,一共分为以下几个步骤:
1、将四个数放入链表(注意是链表,不是数组),每次取出两个数;
2、判断链表里面有几个数,若只有一个数并且值是24则输出计算结果结束,若大于一个数则进行步骤3;
3.1将这两个数做加运算,然后将结果放入原队列,重复步骤2,还原列表中最初取出的两个数;
3.2将这两个数做减运算(注意减法具有交换性),然后将结果放入原队列,重复步骤2,还原列表中最初取出的两个数;
3.3将这两个数做乘运算,然后将结果放入原队列,重复步骤2,还原列表中最初取出的两个数;
3.4将这两个数做除运算(注意除法具有交换性),然后将结果放入原队列,重复步骤2,还原列表中最初取出的两个数;
以下是我的程序,可以按照算法的步骤一步一步来看:不懂的可以加qq联系我532450203
import java.util.ArrayList; import java.util.Scanner; public class Main24 { public static void main(String[] args) { System.out.println("24点游戏计算,输入四个1-10的整数,以空格隔开,自动计算24点:"); ArrayList<Integer> list = input();//输入函数 fun(list, new ArrayList<String>());//计算24点方法 } private static void fun(ArrayList<Integer> list, ArrayList<String> s) { int length = list.size(); if (length > 1) { for (int i = 0; i < length - 1; i++) {//二重循环取出两个数的所有情况 for (int k = i + 1; k < length; k++) { //加运算 int b = list.remove(k); int a = list.remove(i); list.add(0, a + b);//将计算结果添加到原队列 s.add(a + "+" + b + "=" + (a + b));//此处是保存计算的过程 fun(list, s);//递归调动 //下面四句话是为了还原list队列,特别强调进栈和出栈的顺序 list.remove(0); list.add(i, a); list.add(k, b); s.remove(s.size() - 1); //减运算 b = list.remove(k); a = list.remove(i); list.add(0, a - b); s.add(a + "-" + b + "=" + (a - b)); fun(list, s); list.remove(0); list.add(i, a); list.add(k, b); s.remove(s.size() - 1); //减运算 b = list.remove(k); a = list.remove(i); list.add(0, b - a); s.add(b + "-" + a + "=" + (b - a)); fun(list, s); list.remove(0); list.add(i, a); list.add(k, b); s.remove(s.size() - 1); //乘运算 b = list.remove(k); a = list.remove(i); list.add(0, a * b); s.add(a + "*" + b + "=" + (a * b)); fun(list, s); list.remove(0); list.add(i, a); list.add(k, b); s.remove(s.size() - 1); //除运算 b = list.remove(k); a = list.remove(i); if (b != 0 && a % b == 0) { list.add(0, a / b); s.add(a + "/" + b + "=" + (a / b)); fun(list, s); list.remove(0); list.add(i, a); list.add(k, b); s.remove(s.size() - 1); } else { list.add(i, a); list.add(k, b); } //除运算 b = list.remove(k); a = list.remove(i); if (a != 0 && b % a == 0) { list.add(0, b / a); s.add(b + "/" + a + "=" + (b / a)); fun(list, s); list.remove(0); list.add(i, a); list.add(k, b); s.remove(s.size() - 1); } else { list.add(i, a); list.add(k, b); } } } } else { if (s.get(s.size() - 1).endsWith("=24")) { for (String temp : s) { System.out.print(temp + " "); } System.out.println(); } } } private static ArrayList<Integer> input() { ArrayList<Integer> list = new ArrayList<Integer>(); Scanner scanner = new Scanner(System.in); for (int i = 0; i < 4; i++) { list.add(scanner.nextInt()); } return list; } }