黑马程序员技术交流社区

标题: 老农带着猫、狗、鱼过河有需要的吗 [打印本页]

作者: 我相信水滴石穿    时间: 2015-8-29 17:30
标题: 老农带着猫、狗、鱼过河有需要的吗
本帖最后由 我相信水滴石穿 于 2015-8-31 14:00 编辑

package com.itheima;

import java.util.ArrayList;
import java.util.Random;

public class Text10 {
        /**
         * 910、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,
         * 狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
         *
         * @author zety-li
         *
         * 思考:先带猫过去,自己回来再狗过去,把猫带回来,把鱼带过去,自己回来在带猫。
         * */
        
        public static void main(String[] args) {
                ArrayList<String> an = new ArrayList<String>();//原来岸上的动物
                ArrayList<String> duian = new ArrayList<String>();//过河后岸上的动物
                an.add("ren");
                an.add("fich");
                an.add("dog");
                an.add("cat");
                goToRiver(an,duian);
                System.out.println(duian);
        }
        public boolean heXie(ArrayList<String> an) {//当某一个岸上的动物和谐时候返回true否则false
                boolean b = true;
                if(an.size()>1 && an.contains("cat")&&!an.contains("ren")){
                        b= false;
                }
                return b;
        }
        public static void goToRiver(ArrayList<String> an,ArrayList<String> duian){
                Text10 t = new Text10();//建立Text对象,调用heXie()方法
                while(an.size()>1){
                        
                        an.remove("ren");//人必须过河所以从原岸删除
                        Random rd = new Random();//建立随机数,随便带走一个动物
                        int index = rd.nextInt(an.size());
                        if ( an.size() > 1 && index == an.size()){ //老农不能带走刚带回来的动物        
                                an.add("people");
                                continue;
                        }
                        String s = an.get(index);//随便带走一个动物
                        an.remove(index);
                        
                        if(t.heXie(an)){
                                duian.add("ren");//原岸带走动物后和谐,则带走该动物
                                duian.add(s);
                                if(duian.size()==4){//老农和动物都过岸
                                        break;
                                }
                                duian.remove("ren");//老农回原岸带动物
                                if(t.heXie(duian)){
                                        //duian.remove("ren");
                                        an.add("ren");//老农回去时候不发生冲突,老农自己回去
                                }else{
                                        String s2 = duian.get(rd.nextInt(duian.size()));//发生冲突则随机带走一只动物
                                        while (s2.equals(s))//如果带来和带走是同一只,就换。
                                        {
                                                s2 = duian.get(rd.nextInt(duian.size()));
                                        }
                                        //duian.remove("ren");
                                        duian.remove(s2);//老农带走了此岸的动物
                                        an.add("ren");
                                        an.add(s2);         
                                }
                        }else{//老农带走原岸的动物,原岸发生冲突,老农就没有走
                                an.add("ren");
                                an.add(s);
                        }        
                        
                }
        }
}


作者: sunsteam    时间: 2015-8-29 17:53
  * 思考:先带鱼过去,自己回来再狗过去,把猫带回来,把鱼带过去,自己回来在带猫。


这个先带鱼过去  狗不是把猫咬死了麽?   

先带猫 再回来带鱼过去 带回猫 带狗过去 一个人回来带猫过去 我觉得是这样的吧
作者: 我相信水滴石穿    时间: 2015-8-30 10:29
sunsteam 发表于 2015-8-29 17:53
* 思考:先带鱼过去,自己回来再狗过去,把猫带回来,把鱼带过去,自己回来在带猫。

人在的的时候他们不会发生内斗,把猫带过去,在把狗带过去,人回来时候带猫回来。这样对岸就剩狗了
作者: sunsteam    时间: 2015-8-30 22:53
我相信水滴石穿 发表于 2015-8-30 10:29
人在的的时候他们不会发生内斗,把猫带过去,在把狗带过去,人回来时候带猫回来。这样对岸就剩狗了 ...

对啊 我是说先带猫啊  你思想里写的先带鱼
作者: binarycoc    时间: 2015-8-30 23:15
思路有点理不清,还没看懂




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2