用java写出以下题目:有一种数字游戏的规则如下:首先由裁判给定两个不同的正整数,然后参加游戏的几个人轮流给出正整数。要求给出的数字必须是前面已经出现的某两个正整数之差,且不能等于之前的任何一个数。游戏一直持续若干轮,中间有写重复或写错的人就出局。 本题要求你实现这个游戏的裁判机,自动判断每位游戏者给出的数字是否合法,以及最后的赢家。
时间: 2023-06-17 22:05:10 浏览: 68
以下是用 Java 实现的代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class NumberGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
int n = scanner.nextInt();
int m = scanner.nextInt();
numbers.add(n);
numbers.add(m);
int winner = -1;
boolean gameOver = false;
while (!gameOver) {
int nextNumber = scanner.nextInt();
if (!isValidNumber(nextNumber, numbers)) {
System.out.println("Invalid number!");
gameOver = true;
} else if (numbers.contains(nextNumber)) {
System.out.println("Duplicate number!");
gameOver = true;
} else {
numbers.add(nextNumber);
if (numbers.size() == 10) {
winner = 0;
gameOver = true;
} else if (isGameOver(numbers)) {
winner = (numbers.size() - 2) % 2 + 1;
gameOver = true;
}
}
}
if (winner == -1) {
System.out.println("Game over!");
} else {
System.out.printf("Player %d wins!", winner);
}
}
private static boolean isValidNumber(int nextNumber, List<Integer> numbers) {
for (int i = 0; i < numbers.size(); i++) {
for (int j = i + 1; j < numbers.size(); j++) {
int diff = Math.abs(numbers.get(i) - numbers.get(j));
if (diff == nextNumber) {
return true;
}
}
}
return false;
}
private static boolean isGameOver(List<Integer> numbers) {
for (int i = 0; i < numbers.size(); i++) {
for (int j = i + 1; j < numbers.size(); j++) {
int diff = Math.abs(numbers.get(i) - numbers.get(j));
if (!numbers.contains(diff)) {
return false;
}
}
}
return true;
}
}
```
程序首先读入两个正整数,然后创建一个 `List<Integer>` 来存储所有已经出现的数字。接下来进入游戏循环,读入下一个数字并检查它是否合法。如果不合法,就宣布游戏结束并退出循环。如果是重复数字,也是同样的处理。如果数字合法,就把它加入到列表中。如果已经有 10 个数字了,就宣布第一个玩家胜利并退出循环。如果当前列表中的数字已经构成了所有可能的差值,就宣布最后一个玩家胜利并退出循环。最后根据胜利者的编号输出结果。
函数 `isValidNumber` 用于检查给定的数字是否合法。它通过两重循环遍历所有已经出现的数字,并计算它们之间的差值。如果有任何一个差值等于给定的数字,就返回 `true`,否则返回 `false`。
函数 `isGameOver` 用于检查游戏是否结束。它通过两重循环遍历所有已经出现的数字,并计算它们之间的差值。如果有任何一个差值不在列表中,就返回 `false`,否则返回 `true`。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)