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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /*
  2. 10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
  3. 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,
  4. 则不会发生这种问题。编程解决猫狗鱼过河问题。*/

  5. import java.util.ArrayList;
  6. import java.util.List;
  7. public class Guohejihe
  8. {
  9.         ArrayList<String> here = new ArrayList<String>();
  10.         ArrayList<String> there = new ArrayList<String>();

  11. //判断集合是否安全的函数
  12. public boolean isSafty(List<String> list)
  13.         {
  14.                 if (list.contains("dog") && list.contains("cat")
  15.                                 || list.contains("cat") && list.contains("fish"))
  16.                 {
  17.                         return false;
  18.                 }
  19.                 return true;
  20.         }

  21. public Guohejihe()
  22. {
  23.         here.add("Dog");
  24.         here.add("cat");
  25.         here.add("fish");
  26. }

  27. //带东西过河的函数
  28. public void toTake()
  29. {
  30.         String str = here.get(0);
  31.         here.remove(str);
  32.         if (isSafty(here))
  33.         {
  34.                 System.out.println("农夫带着" + str + "去对岸,这边还有" + here + ",对岸有" + there);
  35.                 toThere(str);
  36.         }

  37.         else
  38.         {
  39.                 here.add(str);
  40.                 toTake();
  41.         }
  42. }
  43. //将带过去的东西带回来的函数
  44. public void toThere(String s)
  45. {
  46.         if (isSafty(there))
  47.         {
  48.                 there.add(s);
  49.                 if(here.isEmpty())
  50.                 {
  51.                         System.out.println("农夫,"+there+"完成");
  52.                         return;
  53.                 }
  54.                 if(isSafty(there))
  55.                 {
  56.                         System.out.println("农夫回到原地,对岸有" + there);
  57.                         toTake();
  58.                 }
  59.                 else
  60.                 {
  61.                         String temp=there.get(0);
  62.                         there.remove(temp);
  63.                         System.out.println("农夫带着"+temp+"回去,这边有" + here + ",对岸有" + there);
  64.                         here.add(temp);
  65.                         toTake();
  66.                 }
  67.         }

  68.         else
  69.         {
  70.                 there.remove(s);
  71.                 toTake();
  72.         }
  73. }
  74. public static void main(String[] args)
  75.         {
  76.                 new Guohejihe().toTake();
  77.         }
  78. }
复制代码

这个题也是让我醉了,刚看到以为是脑筋急转弯,用代码实现好难想  ,原来用StringBuilder没做出来,直到今天看到集合才有点思路。

评分

参与人数 4黑马币 +15 收起 理由
蜗牛的异想世界 + 3 赞一个!
怪学究 + 4 好好努力,你就是黑马
天涯111 + 4 很给力!
段立志 + 4 赞一个!

查看全部评分

4 个回复

倒序浏览
脑筋急转弯这么麻烦,也用代码实现了,学习了
回复 使用道具 举报
看见这种题目人就醉了
回复 使用道具 举报
我觉得题目的意思是让我们编程验证提供的过河思路是否正确,而不是编程得出过河的方案,这样就好想了
回复 使用道具 举报
写的不错,顶一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马