三人三鬼过河 Java实现

 题目是这样的:

33鬼在一条河岸的一边,都要到河的另一边去,河边停靠有一条船,最多可以载一人一鬼,或2鬼,或2人,不论何时不管河岸的那一边只要鬼的数量超过人的数量,鬼都会吃掉人导致过河失败:用java 找出过河的方法

实现代码如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
我理解您的问题是:请实现一个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(); } } ``` 运行程序后,按照提示输入要过河的老虎编号,程序会模拟老虎过河的过程,直到所有老虎都过河。每次过河后,程序会打印当前的状态,包括左岸、右岸和船的状态。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值