扑克牌24点游戏算法java
时间: 2023-11-15 11:57:48 浏览: 57
扑克牌24点游戏算法Java的实现可以分为以下几个步骤:
1. 使用Random类生成四个范围为1~13的随机数代表四张牌。
2. 在数组中存放这四个数的所有排列组合方式。
3. 利用穷举法列出四个数和运算符号的所有组合方式。
4. 构造每种组合方式的计算函数。
5. 利用while循环和for循环的嵌套使用求出所有能算出24点的计算式。
具体实现可以参考以下代码:
```java
import java.util.Random;
public class TwentyFourPoints {
public static void main(String[] args) {
int[] nums = new int[4];
Random random = new Random();
for (int i = 0; i < 4; i++) {
nums[i] = random.nextInt(13) + 1;
}
System.out.println("四张牌为:" + nums[0] + " " + nums[1] + " " + nums[2] + " " + nums[3]);
int[][] permutes = permute(nums);
for (int i = 0; i < permutes.length; i++) {
int[] p = permutes[i];
if (calculate(p[0], p[1], p[2], p[3])) {
System.out.println("能够得到24点的表达式为:" + p[0] + " " + p[1] + " " + p[2] + " " + p[3]);
}
}
}
public static int[][] permute(int[] nums) {
int[][] result = new int[24][4];
int index = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (j != i) {
for (int k = 0; k < nums.length; k++) {
if (k != i && k != j) {
int l = 6 - i - j - k;
result[index++] = new int[]{nums[i], nums[j], nums[k], nums[l]};
}
}
}
}
}
return result;
}
public static boolean calculate(int a, int b, int c, int d) {
return calculate(a, b, c, d, 0, 0, 0, 0) == 24;
}
public static int calculate(int a, int b, int c, int d, int i, int j, int k, int l) {
if (i == 3 && j == 3 && k == 3 && l == 3) {
return a;
}
int result = 0;
switch (i) {
case 0:
result = calculate(a + b, c, d, 0, i + 1, j, k, l);
break;
case 1:
result = calculate(a - b, c, d, 0, i + 1, j, k, l);
break;
case 2:
result = calculate(a * b, c, d, 0, i + 1, j, k, l);
break;
case 3:
result = calculate(a / b, c, d, 0, i + 1, j, k, l);
break;
}
switch (j) {
case 0:
result = calculate(result + c, 0, 0, 0, i, j + 1, k, l);
break;
case 1:
result = calculate(result - c, 0, 0, 0, i, j + 1, k, l);
break;
case 2:
result = calculate(result * c, 0, 0, 0, i, j + 1, k, l);
break;
case 3:
result = calculate(result / c, 0, 0, 0, i, j + 1, k, l);
break;
}
switch (k) {
case 0:
result = calculate(result + d, 0, 0, 0, i, j, k + 1, l);
break;
case 1:
result = calculate(result - d, 0, 0, 0, i, j, k + 1, l);
break;
case 2:
result = calculate(result * d, 0, 0, 0, i, j, k + 1, l);
break;
case 3:
result = calculate(result / d, 0, 0, 0, i, j, k + 1, l);
break;
}
return result;
}
}
```