A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

入学考试基础题第十题,10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。菜鸟一枚,想了好久才想到,程序有很多不足之处,请大家能够指点一二;
  1. package com.itheima;

  2. import java.util.LinkedList;

  3. /**
  4. * 10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,
  5. * 当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
  6. *
  7. *         答:河左岸有农夫,鱼,狗,猫。
  8. *         因为农夫的目的就是要把动物全给带到河右岸,所以分两种情况;
  9. *         第一种情况是:当农夫在河左岸时,必须要带一个动物过河右岸,如果农夫把该动物带走,河左岸和谐的话,则计数一次
  10. *         第二种情况是:当农夫在河右岸时,农夫优先选择是自己独自回到河左岸,如果农夫独自回去,河右岸不和谐时,再进行选择带走一个最先进入河右岸的动物。不能选择农夫刚刚才带过来的动物。
  11. *        
  12. * @author liwensi
  13. * */
  14. public class Test10 {
  15.         public static void main(String[] args) {
  16.                 new River().river();
  17.         }
  18. }

  19. class River {
  20.         LinkedList<String> here = new LinkedList<String> ();
  21.         LinkedList<String> there = new LinkedList<String> ();
  22.         String farmer = "老农",cat = "猫",fish = "鱼",dog = "狗";
  23.         int count = 0;
  24.        
  25.         public void river() {
  26.                 here.addLast(farmer);
  27.                 here.addLast(cat);
  28.                 here.addLast(fish);
  29.                 here.addLast(dog);
  30.                 //如果河的左岸有动物,则根据老农所处的位置判断如何过河
  31.                 while(!here.isEmpty()) {
  32.                         //如果老农在河左岸,则需要运行老农在河左岸的过河方法
  33.                         if(here.contains(farmer))
  34.                                 hereRiver();
  35.                         else
  36.                                 thereRiver();
  37.                 }
  38.                 System.out.println("在河的右岸有"+there);
  39.         }
  40.         //老农在河左岸时的过河方法
  41.         private void hereRiver() {
  42.                 //老农在河左岸带着其中一种动物过河,这时只需要判断这边的关系是否和谐,
  43.                 //先取老农
  44.                 here.remove(farmer);
  45.                 String animal = null;
  46.                 //老农取一种动物
  47.                 while((animal = here.remove()) != null) {
  48.                         //如果这边是和谐的,就让老农带着这种动物过河的右岸
  49.                         if(isHarmony(here)) {
  50.                                 there.addLast(farmer);
  51.                                 there.addLast(animal);
  52.                                 System.out.println("第"+(++count)+"次:        老农带着("+animal+")划船过河的右岸");
  53.                                 return ;
  54.                         } else {
  55.                                 here.addLast(animal);
  56.                         }
  57.                 }
  58.                        
  59.         }
  60.         //老农在河右岸时过河的方法
  61.         private void thereRiver() {
  62.                 //老农在河右岸上,优先选择是什么都不带的回去
  63.                 there.remove(farmer);
  64.                 String animal = null;
  65.                 //判断河右岸是否和谐,和谐,老农才能什么都不带的回去
  66.                 if(isHarmony(there)){
  67.                         System.out.println("第"+(++count)+"次:        老农[什么都不带]划船回到河的左岸");
  68.                         here.addLast(farmer);
  69.                 } else {
  70.                         while((animal = there.remove()) != null) {
  71.                                 //老农带走最早进入河右岸的动物,如果这边和谐的话,则带走。
  72.                                 if(isHarmony(there)) {
  73.                                         here.addLast(farmer);
  74.                                         here.addLast(animal);
  75.                                         System.out.println("第"+(++count)+"次:        老农带着("+animal+")划船回到河的左岸");
  76.                                         return ;
  77.                                 }else {
  78.                                         //如果带走的动物,会导致河右岸不和谐,则不带走该动物。
  79.                                         there.addLast(animal);
  80.                                 }
  81.                         }
  82.                 }
  83.                
  84.         }
  85.         private boolean isHarmony(LinkedList<String> list) {
  86.                 //判断关系,狗跟猫同时在,或者猫跟鱼同时在的话,则返回false,不和谐
  87.                 if (list.contains(dog) && list.contains(cat)) {
  88.                                 return false;
  89.                 }else if(list.contains(cat) && list.contains(fish))  {
  90.                         return false;
  91.                 }else
  92.                         //没有不和谐的条件,返回此地为和谐状态。
  93.                         return true;
  94.         }
  95. }
复制代码




点评

好有耐心  发表于 2015-7-11 12:12

31 个回复

正序浏览
学习一下。。。
回复 使用道具 举报
杨基米德 来自手机 中级黑马 2015-7-12 07:39:59
29#
好的,学习了!多谢
回复 使用道具 举报
这题有点狠啊
回复 使用道具 举报
很厉害,先收起来,以后再学
回复 使用道具 举报
这个题应该说思路就好了吧,用基础程序感觉太难写了
回复 使用道具 举报
:#
虽然现在写不出来,但是根据注释能大概看懂~一些~。

新手一定要多敲和多看~代码~

回复 使用道具 举报
果断学习之 这题很难
回复 使用道具 举报
这是基础题??这么难
回复 使用道具 举报
答案大家可能都知道,不过能写出代码非常不错
回复 使用道具 举报
。。。基础题居然这么难
回复 使用道具 举报
mark,不错,加油!
回复 使用道具 举报
学习了.
回复 使用道具 举报
palysh 发表于 2015-7-10 22:03
小声问一下,这题目要求是直接回答呢,还是编写程序

题目要求是编写程序
回复 使用道具 举报
泪奔小子 来自手机 中级黑马 2015-7-11 12:05:23
17#
感觉你这写的逻辑好复杂,我当时就写带走动物的几个方法
回复 使用道具 举报
感觉好难的样子
回复 使用道具 举报
nanfp 中级黑马 2015-7-11 10:14:35
15#
学习了 ,谢谢
回复 使用道具 举报
学习一下                    
回复 使用道具 举报
学习学习,顺带收藏一番
回复 使用道具 举报
wh121 中级黑马 2015-7-11 00:45:47
12#
学习了,很有帮助
回复 使用道具 举报
这种题目在逻辑上要求很严密啊。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马