java中一副扑克牌计算二十四点
时间: 2023-09-08 12:04:06 浏览: 64
计算二十四点是一个经典的扑克牌游戏,玩家需要通过运算使得手中的四张牌的运算结果为24。在Java中,我们可以使用递归方法实现这个计算过程。
首先,我们需要定义一个递归函数,该函数的输入参数是一个存储扑克牌数字的数组和一个表示运算结果是否为24的布尔值。在每一轮递归中,我们会对数组中的所有可能的数字组合进行计算,并将计算结果递归传递给下一层。
在计算结果为24的情况下,我们会将布尔值设为true,并在递归结束后返回该值。如果递归过程中没有找到计算结果为24的情况,布尔值会保持为false,最终返回该值。
具体的计算逻辑如下:
1. 首先定义一个函数,接收一个数组和一个布尔值作为参数。
2. 如果数组长度为1且该数字等于24,则返回true。
3. 对于数组中的每个数字,我们选择其中两个数字进行四则运算,并将结果存储在一个新的数组中。
4. 递归调用该函数,将新数组和布尔值作为参数传递。
5. 如果递归函数返回true,则表示找到了计算结果为24的情况,直接返回true。
6. 对于每一对数字的四则运算,我们都需要进行加法、减法、乘法和除法运算,并将得到的结果进行递归计算。
7. 如果在该函数的任何运算过程中找到了计算结果为24的情况,直接返回true。
8. 如果以上步骤中都没有找到计算结果为24的情况,则返回false。
通过以上递归方法,我们可以在Java中完成扑克牌计算二十四点的游戏。
相关问题
用扑克牌计算24点c语言
扑克牌24点游戏是一种玩法类似于上面提到的数学游戏的游戏。以下是一个C语言实现,可以用扑克牌进行游戏:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int check(double a, double b, double c, double d) {
double exp[5];
int i, j, k, l, m;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (j == i) continue;
for (k = 0; k < 4; k++) {
if (k == i || k == j) continue;
for (l = 0; l < 4; l++) {
if (l == i || l == j || l == k) continue;
exp[0] = a;
exp[1] = b;
exp[2] = c;
exp[3] = d;
for (m = 0; m < 5; m++) {
if (m == 0) exp[m] = exp[i] + exp[j];
else if (m == 1) exp[m] = exp[i] - exp[j];
else if (m == 2) exp[m] = exp[i] * exp[j];
else if (m == 3 && exp[j] != 0) exp[m] = exp[i] / exp[j];
else continue;
exp[i] = exp[k];
exp[j] = exp[l];
exp[k] = exp[m];
if (k > l) {
int temp = k;
k = l;
l = temp;
}
exp[l] = exp[3];
if (exp[2] == 24) return 1;
}
}
}
}
}
return 0;
}
int main() {
int i, j, k, l;
double a, b, c, d;
srand(time(NULL));
while (1) {
i = rand() % 13 + 1;
j = rand() % 13 + 1;
k = rand() % 13 + 1;
l = rand() % 13 + 1;
if (check(i, j, k, l)) {
printf("找到了一组可以得到24的扑克牌:");
if (i == 1) printf("A ");
else if (i == 11) printf("J ");
else if (i == 12) printf("Q ");
else if (i == 13) printf("K ");
else printf("%d ", i);
if (j == 1) printf("A ");
else if (j == 11) printf("J ");
else if (j == 12) printf("Q ");
else if (j == 13) printf("K ");
else printf("%d ", j);
if (k == 1) printf("A ");
else if (k == 11) printf("J ");
else if (k == 12) printf("Q ");
else if (k == 13) printf("K ");
else printf("%d ", k);
if (l == 1) printf("A ");
else if (l == 11) printf("J ");
else if (l == 12) printf("Q ");
else if (l == 13) printf("K ");
else printf("%d ", l);
printf("\n");
break;
}
}
return 0;
}
```
这个程序中,使用了和上面类似的`check`函数来判断给定的四张扑克牌是否可以得到24。程序使用了`rand()`函数来生成四张随机的扑克牌,如果可以得到24,则输出这四张牌的面值。如果不行,则继续生成新的组合,直到找到一组可以得到24的牌为止。
扑克牌24点游戏算法java
扑克牌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;
}
}
```