本帖最后由 我相信水滴石穿 于 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);
}
}
}
}
|
|