入学考试基础题第十题,10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。菜鸟一枚,想了好久才想到,程序有很多不足之处,请大家能够指点一二;- package com.itheima;
- import java.util.LinkedList;
- /**
- * 10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,
- * 当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
- *
- * 答:河左岸有农夫,鱼,狗,猫。
- * 因为农夫的目的就是要把动物全给带到河右岸,所以分两种情况;
- * 第一种情况是:当农夫在河左岸时,必须要带一个动物过河右岸,如果农夫把该动物带走,河左岸和谐的话,则计数一次
- * 第二种情况是:当农夫在河右岸时,农夫优先选择是自己独自回到河左岸,如果农夫独自回去,河右岸不和谐时,再进行选择带走一个最先进入河右岸的动物。不能选择农夫刚刚才带过来的动物。
- *
- * @author liwensi
- * */
- public class Test10 {
- public static void main(String[] args) {
- new River().river();
- }
- }
- class River {
- LinkedList<String> here = new LinkedList<String> ();
- LinkedList<String> there = new LinkedList<String> ();
- String farmer = "老农",cat = "猫",fish = "鱼",dog = "狗";
- int count = 0;
-
- public void river() {
- here.addLast(farmer);
- here.addLast(cat);
- here.addLast(fish);
- here.addLast(dog);
- //如果河的左岸有动物,则根据老农所处的位置判断如何过河
- while(!here.isEmpty()) {
- //如果老农在河左岸,则需要运行老农在河左岸的过河方法
- if(here.contains(farmer))
- hereRiver();
- else
- thereRiver();
- }
- System.out.println("在河的右岸有"+there);
- }
- //老农在河左岸时的过河方法
- private void hereRiver() {
- //老农在河左岸带着其中一种动物过河,这时只需要判断这边的关系是否和谐,
- //先取老农
- here.remove(farmer);
- String animal = null;
- //老农取一种动物
- while((animal = here.remove()) != null) {
- //如果这边是和谐的,就让老农带着这种动物过河的右岸
- if(isHarmony(here)) {
- there.addLast(farmer);
- there.addLast(animal);
- System.out.println("第"+(++count)+"次: 老农带着("+animal+")划船过河的右岸");
- return ;
- } else {
- here.addLast(animal);
- }
- }
-
- }
- //老农在河右岸时过河的方法
- private void thereRiver() {
- //老农在河右岸上,优先选择是什么都不带的回去
- there.remove(farmer);
- String animal = null;
- //判断河右岸是否和谐,和谐,老农才能什么都不带的回去
- if(isHarmony(there)){
- System.out.println("第"+(++count)+"次: 老农[什么都不带]划船回到河的左岸");
- here.addLast(farmer);
- } else {
- while((animal = there.remove()) != null) {
- //老农带走最早进入河右岸的动物,如果这边和谐的话,则带走。
- if(isHarmony(there)) {
- here.addLast(farmer);
- here.addLast(animal);
- System.out.println("第"+(++count)+"次: 老农带着("+animal+")划船回到河的左岸");
- return ;
- }else {
- //如果带走的动物,会导致河右岸不和谐,则不带走该动物。
- there.addLast(animal);
- }
- }
- }
-
- }
- private boolean isHarmony(LinkedList<String> list) {
- //判断关系,狗跟猫同时在,或者猫跟鱼同时在的话,则返回false,不和谐
- if (list.contains(dog) && list.contains(cat)) {
- return false;
- }else if(list.contains(cat) && list.contains(fish)) {
- return false;
- }else
- //没有不和谐的条件,返回此地为和谐状态。
- return true;
- }
- }
复制代码
|
|