一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
来源:互联网 发布:linux vi 复制整行 编辑:程序博客网 时间:2024/04/27 23:08
import java.util.ArrayList;import java.util.List;import java.util.Random;/** * 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼, * 当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。 * * 思路: * 1.猫不能和其他两种动物在一起 * 2.先把猫带到对岸 * 农夫自己回来 * 农夫把狗或鱼带到对岸 * 农夫把猫带回来 * 农夫再把剩下的动物带到对岸 * 农夫自己回来 * 农夫把猫带到对岸 * @author xiajie * */public class Test10 {//定义猫狗鱼变量 private static final String cat = " 猫 "; private static final String dog = " 狗 "; private static final String fish = " 鱼 "; private static final String farmer = " 农夫 "; private static List<String> left = new ArrayList<String>();//左岸的集合 private static List<String> right = new ArrayList<String>();//右岸的集合 //在无参构造方法中将猫狗鱼添加到left集合中去 public Test10(){ left.add(fish); left.add(dog); left.add(farmer); left.add(cat); } public static void main(String[] args) {new Test10().cross();//实例化本来对象并调用过河方法}public static void cross(){//当左岸有动物就一直继续while(left.size() > 1){left.remove(farmer);//农夫一定要带着一个动物渡河Random random = new Random();//老农随机带走一直动物int index = random.nextInt(left.size());//产生的随机数不能大于总个数,即产生了一个 不大于left.size的数字if(index == left.size()-1 && left.size()>1){//为防止老农带走刚带回来的动物,因为这个List中存储数据是先进先出的所以,不能是最后的一个数,因为最后一个数表示的是农夫刚带回来动物,最后加如leftList中的left.add(farmer);continue;//continue 跳过当前循环体continue后面的代码,继续执行下一个循环}String animal = left.get(index);//随机产生的动物left.remove(animal);//带走随机产生的一个动物 if(isFriendly(left)){//如果老农带走该动物后,正岸没有冲突,则带走该动物 right.add(farmer);//老农和动物到岸,加入Left集合中区 right.add(animal); System.out.println("老农带着"+animal+"到了对岸"); if(right.size() == 4){ //当老农和动物全部到达对岸,则渡河完成 break;//break 跳出当前循环体 } right.remove(farmer);//老农返回 if(isFriendly(right)){//如果老农独自返回右岸和谐,则让老农独自返回 left.add(farmer); System.out.println("老农独自返回"); }else{//否则老农要随机带一直动物回来 String animal2 = right.get(random.nextInt(right.size())); while(animal2.equals(animal)){ animal2 = right.get(random.nextInt(right.size())); } right.remove(animal2); left.add(farmer); left.add(animal2);//老农带着一个动物返回 System.out.println("老农带着"+animal2+"返回"); } }else{//如果老农带走该动物后,正岸发生冲突,则放回动物,重新加入Left集合中去 left.add(animal); left.add(farmer); }}System.out.println("所有动物都成功过河了,完成任务!!!");}//用来判断两种动物在一起是不是和谐public static boolean isFriendly(List<String> list){boolean flag ;//如果猫和其他的在一起,而没有人则不和谐if(list.size() >1 && list.contains(cat) && !list.contains(farmer)){flag = false ;}else{flag = true ;}return flag;}}
注意:一定要让程序根据题目的条件自己选择执行,不能按照自己的想法去指定程序运行的步骤。
输出结果:
老农带着 猫 到了对岸
老农独自返回
老农带着 鱼 到了对岸
老农带着 猫 返回
老农带着 狗 到了对岸
老农独自返回
老农带着 猫 到了对岸
所有动物都成功过河了,完成任务!!!
0 0
- 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
- 老农解决猫狗鱼的问题(黑马基础习题)
- Java解决编程猫狗鱼过河问题
- 老农过河问题
- 黑马程序员-10.一位老农带着猫、狗、鱼过河
- 黑马程序员-----第十题 : 一位老农带着猫、狗、鱼过河问题
- 农夫运送猫狗鱼过河问题(面向对象)
- 农夫带猫狗鱼过河的题目
- 老农猫、狗、鱼过河问题 黑马测试题,个人的解答.靠程序搜索答案 只给判断条件,无人为辅助判断
- 老农和毛驴
- 老农毛驴
- 一群老农
- 老农和驴子的故事
- 解决稻香老农无组件上传类在文件上传时当文件名中含中文单双引号取不到正确的文件名的方案
- 老农赶驴
- 【CJOJ P1096】最佳老农
- 老农漫画第一期
- 老农漫画第三期
- 深入学习Objective-C的NSObject
- Java笔记整理——流程控制和字符串
- SSH开发环境整合搭建
- 揍鬃追捉谆状渍注卓谞嘴阻综缀紫灼砖茁
- JZ2440开发板学习------中级(二十六:中)
- 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
- 安装nodejs
- 族邹姿尊谞鬃庄租住椎籽转渍籽揍滋作赚
- NPOI
- 壮啄茁卒组紫姿赘撰桌遵浊滓淄咨庄滋鬃
- tomcat部署war包步骤及出现的问题和解决方法
- Sicily. Walk This Way
- 滋锥字自棕祝左祖阻咨座钻壮祖自综赚谞
- Java笔记整理——数组