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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiong910627 中级黑马   /  2014-9-4 10:40  /  6990 人查看  /  40 人回复  /   6 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xiong910627 于 2014-9-4 21:16 编辑

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

  2. public class Test10 {
  3.         
  4.         public static void main(String[] args)
  5.         {
  6.                 new Test10().tohere();
  7.         }
  8.                 //创建一个集合,代表起始点.
  9.                 ArrayList<String> here = new ArrayList<String>();
  10.                 //创建一个集合,代表终点.
  11.                 ArrayList<String> there = new ArrayList<String>();
  12.                 //添加元素.
  13.                 public Test10()
  14.                 {
  15.                         here.add("Dog");
  16.                         here.add("cat");
  17.                         here.add("fish");
  18.                 }
  19.         
  20.                 //定义一个方法,用来判断这三个动物之间关系.
  21.                 public boolean isSafe(ArrayList<String> al)
  22.                 {
  23.                         if (al.contains("dog") && al.contains("cat")|| al.contains("cat") && al.contains("fish"))
  24.                         {
  25.                                 return false;
  26.                         }
  27.                         return true;
  28.                 }

  29.                 //定义一个方法,将起点的元素送到终点.
  30.                 public void tohere() {
  31.                         String str = here.get(0);
  32.                         here.remove(str);
  33.                         if (isSafe(here)) {
  34.                                 System.out.println("1农夫带着" + str + "去往对岸,这边还剩下" + here + ",对岸有" + there);
  35.                                 toThere(str);
  36.                         } else {
  37.                                 here.add(str);
  38.                                 tohere();
  39.                         }
  40.                 }
  41.                 //定义一个方法,用来查看终点的元素.
  42.                 public void toThere(String s) {
  43.                         
  44.                         if (isSafe(there)) {
  45.                                 there.add(s);
  46.                         
  47.                                 if(here.isEmpty()){
  48.                                         System.out.println("4农夫,"+there+"都被你带过来了");
  49.                                         return;
  50.                                 }
  51.                         
  52.                                 if(isSafe(there)){
  53.                                         System.out.println("2农夫回到原点,对岸有" + there);
  54.                                         tohere();
  55.                                 }else{
  56.                                         String temp=there.get(0);
  57.                                         there.remove(temp);
  58.                                         System.out.println("3农夫带着"+temp+"回到原点,这边有" + here + ",对岸有" + there);
  59.                                         here.add(temp);
  60.                                         tohere();
  61.                                 }
  62.                         } else {
  63.                                 there.remove(s);
  64.                                 tohere();}
  65.                 }
  66. }

复制代码





40 个回复

正序浏览
我也是这个,
回复 使用道具 举报
其实代码不难,难的是思路
回复 使用道具 举报
大牛啊                                 
回复 使用道具 举报
..........................
回复 使用道具 举报
个人认为有些 部分没有必要,这样可以吗?
public class Test10 {
        public static void main(String[] args) {
                new Test10().tohere();
        }

    //创建一个集合,代表起始点.
    ArrayList<String> here = new ArrayList<String>();
    //创建一个集合,代表终点.
    ArrayList<String> there = new ArrayList<String>();
    //添加元素.
    public Test10()
    {
        here.add("Dog");
        here.add("cat");
        here.add("fish");
    }
   
    //定义一个方法,用来判断这三个动物之间关系.
    public boolean isSafe(ArrayList<String> al){
            if (al.contains("dog") && al.contains("cat")
                            || al.contains("cat") && al.contains("fish")){
                    return false;
        }
            return true;
    }

    //定义一个方法,将起点的元素送到终点.
    public void tohere() {
        String str = here.get(0);
        here.remove(str);
        if (isSafe(here)) {
            System.out.println("1农夫带着" + str + "去往对岸,这边还剩下" + here + ",对岸有" + there);
            toThere(str);
            }
                else{
                here.add(str);
                tohere();
            }
    }

    //定义一个方法,用来查看终点的元素.
    public void toThere(String s){                  
       // if(isSafe(there)){
                        there.add(s);
                        if(here.isEmpty()){
                                System.out.println("4农夫,"+there+"都被你带过来了");
                                return;
                        }

                        if(isSafe(there)){
                                System.out.println("2农夫回到原点,对岸有" + there);
                                tohere();
                        }
                        else{
                                String temp=there.get(0);
                                there.remove(temp);
                                System.out.println("3农夫带着"+temp+"回到原点,这边有" + here + ",对岸有" + there);
                                here.add(temp);
                                tohere();
                        }
//        }
//        else{
//                        there.remove(s);
//                        tohere();
//        }
    }
}
回复 使用道具 举报
测试试题啊。。。
回复 使用道具 举报
风华正茂 来自手机 中级黑马 2015-8-14 12:14:16
35#
学习了,谢谢楼主分享
回复 使用道具 举报
这题  感觉挺难得额
回复 使用道具 举报
很厉害呀! 自己一开始完全不会做呢
回复 使用道具 举报
正常用汉字很轻松就能解决,可用代码就很吃力。学习了。
回复 使用道具 举报
楼主好厉害!
回复 使用道具 举报
赞一个学习了。
回复 使用道具 举报
谢谢分享,学习了
回复 使用道具 举报
来赞一个
回复 使用道具 举报
来赞一个
回复 使用道具 举报
学习下。。。。。。。
回复 使用道具 举报
顶顶顶顶顶顶
回复 使用道具 举报
学习了 ,我的也是这个……
回复 使用道具 举报
chen_32768 发表于 2014-9-4 16:04
学习一下,我的测试题就是这个、

这个是基础测试吗。兄弟
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马