java程序设计蜘蛛纸牌_24点纸牌游戏(JAVA 编程习题)
时间: 2023-06-19 11:10:05 浏览: 118
araneid-1.0.2.zip_java 蜘蛛纸牌_java 毕业设计_毕业设计_蜘蛛纸牌游戏
5星 · 资源好评率100%
以下是一个简单的 Java 实现纸牌游戏 24 点的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class SpiderCardGame {
private static final int TARGET_NUMBER = 24;
private static final double EPSILON = 1e-6;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入 4 张牌(用空格隔开):");
List<Double> cards = new ArrayList<>();
for (int i = 0; i < 4; i++) {
cards.add(scanner.nextDouble());
}
if (canMake24(cards)) {
System.out.println("可以凑出 24 点!");
} else {
System.out.println("无法凑出 24 点!");
}
}
private static boolean canMake24(List<Double> cards) {
if (cards.size() == 1) {
return Math.abs(cards.get(0) - TARGET_NUMBER) < EPSILON;
}
for (int i = 0; i < cards.size(); i++) {
for (int j = i + 1; j < cards.size(); j++) {
double a = cards.get(i), b = cards.get(j);
List<Double> remainingCards = new ArrayList<>(cards);
remainingCards.remove(j);
remainingCards.remove(i);
if (canMake24(remainingCards.subList(0, remainingCards.size()), a + b)) {
return true;
}
if (canMake24(remainingCards.subList(0, remainingCards.size()), a - b)) {
return true;
}
if (canMake24(remainingCards.subList(0, remainingCards.size()), b - a)) {
return true;
}
if (canMake24(remainingCards.subList(0, remainingCards.size()), a * b)) {
return true;
}
if (b != 0 && canMake24(remainingCards.subList(0, remainingCards.size()), a / b)) {
return true;
}
if (a != 0 && canMake24(remainingCards.subList(0, remainingCards.size()), b / a)) {
return true;
}
}
}
return false;
}
private static boolean canMake24(List<Double> cards, double current) {
cards.add(current);
return canMake24(cards);
}
}
```
该程序使用递归实现了对 4 张牌能否凑出 24 点的判断。其中,`canMake24(cards)` 方法用于判断某个列表中的牌是否能凑出 24 点,`canMake24(cards, current)` 方法用于在某个列表中加入当前计算结果后再进行判断。具体实现中,我们使用了两层循环来枚举所有可能的两张牌,然后对这两张牌进行加、减、乘、除等操作,再将得到的结果递归传入下一层判断,直到判断出是否能凑出 24 点。注意在除法操作时要注意被除数是否为 0,以及浮点数比较时要使用一个很小的误差范围来避免精度问题。
阅读全文