package com.itheima;
import java.util.ArrayList;
/*第十题:
* 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
*思路:定义两个Arraylist,左岸,右岸,只要左岸list长度为0即可
* 其间当船不为空时判断左岸右岸是否同时存在猫鱼或者猫狗的问题
*/
public class Test10 {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
//创建两个ArraylList,用于存放左岸右岸的元素
ArrayList<String> left=new ArrayList<String>();
ArrayList<String> right=new ArrayList<String>();
left.add("猫");
left.add("鱼");
left.add("狗");//设定初始条件猫狗鱼在河的左岸
int count=1;
while(left.size()!=0){
//左岸情况
if((count%2)!=0){
//如果count数为奇数,那么老农在河的左岸
for(int i=0;i<left.size();i++){
String a=left.get(i);//用于存储没运之前状况用以恢复
left.remove(i);
if((left.contains("狗")&&left.contains("猫"))||
(left.contains("鱼")&&left.contains("猫"))){
//检测运走一只动物后左岸是否会出现不良事件,若出现将左岸还原,然后继续循环
left.add(a);
continue;
}//如果左岸出现猫鱼。猫狗现象则将left还原重新循环
else{
right.add(a);
sop("第"+count+"次运送"+a+"去右岸");
break;//
}
}
count++;
}
else{
if((right.contains("狗")&&right.contains("猫"))||
(right.contains("鱼")&&right.contains("猫"))){
for(int j=0;j<right.size();j++){
String b=right.get(j);//用于存储没运之前状况用以恢复
right.remove(j);
if((right.contains("狗")&&right.contains("猫"))||
(right.contains("鱼")&&right.contains("猫"))){
//检测运走一只动物后左岸是否会出现不良事件,若出现将左岸还原,然后继续循环
right.add(b);
continue;
}//如果左岸出现猫鱼。猫狗现象则将left还原重新循环
else{
left.add(b);
sop("第"+count+"次运送"+b+"去左岸");
break;
}
}
}
else{
sop("第"+count+"次老农独自乘船去左岸");
}
count++;
}
}
}
}
|
|