三对母子老虎过河java
时间: 2023-10-14 10:16:04 浏览: 39
我理解您的问题是:请实现一个Java程序,模拟三对母子老虎过河的过程。
以下是Java代码实现:
```java
import java.util.*;
public class TigerRiverCrossing {
public static void main(String[] args) {
// 定义三对母子老虎,用0代表母老虎,1代表小老虎
int[][] tigers = {{0, 0}, {0, 1}, {0, 1}, {1, 0}, {1, 1}, {1, 0}};
// 定义岸边和船
int[] leftBank = {1, 1, 1, 1, 1, 1}; // 1代表左岸
int[] rightBank = {0, 0, 0, 0, 0, 0}; // 0代表右岸
int[] boat = {0, 0}; // 0代表船在左岸,1代表船在右岸
// 初始化船上没有乘客
int[] onBoat = {0, 0};
// 循环操作直到所有老虎都过河
while (!isCrossed(tigers, rightBank)) {
System.out.println("当前状态:");
displayStatus(tigers, leftBank, rightBank, boat);
Scanner scanner = new Scanner(System.in);
// 输入要过河的老虎编号
System.out.print("请输入要过河的老虎编号(1-6):");
int tigerIndex = scanner.nextInt() - 1;
// 判断老虎是否已经过河
if (rightBank[tigerIndex] == 1) {
System.out.println("该老虎已经在右岸,不能再次过河!");
continue;
}
// 判断老虎和它的小老虎是否都在同一岸边
if (leftBank[tigerIndex] != leftBank[tigerIndex + 1]) {
System.out.println("该老虎的小老虎不在同一岸边,不能过河!");
continue;
}
// 判断船是否已经满了
if (onBoat[0] == 1 && onBoat[1] == 1) {
System.out.println("船已经满了,不能再载更多的老虎!");
continue;
}
// 往船上添加乘客
onBoat[0] = 1;
onBoat[1] = tigers[tigerIndex][1];
boat[0] = leftBank[tigerIndex];
boat[1] = rightBank[tigerIndex];
// 更新岸边和船的状态
leftBank[tigerIndex] = 1 - leftBank[tigerIndex];
leftBank[tigerIndex + 1] = 1 - leftBank[tigerIndex + 1];
rightBank[tigerIndex] = 1 - rightBank[tigerIndex];
rightBank[tigerIndex + 1] = 1 - rightBank[tigerIndex + 1];
if (isCrossed(tigers, rightBank)) {
System.out.println("所有老虎都已经过河,游戏结束!");
break;
}
// 从船上移除乘客
onBoat[0] = 0;
onBoat[1] = 0;
boat[0] = 0;
boat[1] = 0;
}
}
// 判断所有老虎是否已经过河
private static boolean isCrossed(int[][] tigers, int[] rightBank) {
for (int i = 0; i < tigers.length; i++) {
if (rightBank[i] == 0) {
return false;
}
}
return true;
}
// 打印过河状态
private static void displayStatus(int[][] tigers, int[] leftBank, int[] rightBank, int[] boat) {
System.out.println("左岸:");
for (int i = 0; i < tigers.length; i++) {
if (leftBank[i] == 1) {
String tigerStr = "";
if (tigers[i][0] == 0) {
tigerStr += "母老虎";
} else {
tigerStr += "小老虎";
}
if (tigers[i][1] == 0) {
tigerStr += "(未带它的小老虎)";
} else {
tigerStr += "(带它的小老虎)";
}
System.out.print(tigerStr + " ");
}
}
System.out.println();
System.out.println("右岸:");
for (int i = 0; i < tigers.length; i++) {
if (rightBank[i] == 1) {
String tigerStr = "";
if (tigers[i][0] == 0) {
tigerStr += "母老虎";
} else {
tigerStr += "小老虎";
}
if (tigers[i][1] == 0) {
tigerStr += "(未带它的小老虎)";
} else {
tigerStr += "(带它的小老虎)";
}
System.out.print(tigerStr + " ");
}
}
System.out.println();
if (boat[0] == 1) {
System.out.println("船在左岸");
} else {
System.out.println("船在右岸");
}
System.out.println();
}
}
```
运行程序后,按照提示输入要过河的老虎编号,程序会模拟老虎过河的过程,直到所有老虎都过河。每次过河后,程序会打印当前的状态,包括左岸、右岸和船的状态。