Java解决编程猫狗鱼过河问题
来源:互联网 发布:retrofit源码解析 编辑:程序博客网 时间:2024/04/29 16:45
考试中遇到的一道逻辑问题:一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
出现的涉及变化的对象:两岸,动物,老农
两岸包含动物,可以用集合,方便两岸的动物的增删。
老农只有两种状态,用Boolean,左岸TRUE,右岸FALSE。
定义一个移动动物的方法,移动就需要判断知道过河的规则
过河规则:
- 判断两岸是否冲突
- 禁止带回刚带来的动物
- 左岸——右岸必须带一个动物,右岸——左岸可带可不带
1,2规则是两岸带动物的共同规则,抽取为移动动物的方法
3是两岸的不同规则。在过河中控制
public class Test {//两岸的集合left,rightList<String> left = new ArrayList<String>();List<String> right = new ArrayList<String>();//老农person定义为Boolean,左岸TRUE,右岸FALSEBoolean person = true;//take记录运送的动物String take = "";public Test() {left.add("dog");left.add("cat");left.add("fish");}public boolean isSafe(List<String> river) {//当某岸动物大于一只,并且有猫是不安全,返回FALSEif (river.size()>1 & river.contains("cat")) {return false;}return true;}public void move(List<String> del, List<String> save, boolean p) {Random random = new Random(); //老农随机带走一直动物int index = random.nextInt(del.size());//移动随机抽取的动物String leftstr = del.remove(index);save.add(leftstr);//判断是否和上次带过来的动物一样if (take.equals(leftstr)) {del.add(leftstr);save.remove(leftstr);}else {//判断移动后是否本岸是否安全if (isSafe(del)) {take = leftstr;System.out.println(take);person = !p;} else {del.add(leftstr);save.remove(leftstr);}}}public void moveAnimal() {//当左岸的动物都带走完,停止循环while (left.size()>0) {//判断农夫在左岸还是右岸if (person==true) {move(left, right, person);}if (person==false) {//右岸安全的话,农夫不带动物回到左岸if (isSafe(right)) {System.out.println("老农一个人返回左岸");person = true;}else {move(right, left, person);}}}}public static void main(String[] args) {Test test = new Test();test.moveAnimal();}}
0 0
- Java解决编程猫狗鱼过河问题
- 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
- 农夫运送猫狗鱼过河问题(面向对象)
- 农夫带猫狗鱼过河的题目
- 编程解决过河问题
- 老农解决猫狗鱼的问题(黑马基础习题)
- 用编程解决过河问题
- Java解决 过河问题
- 【算法编程】过河问题
- Java编程能力强化——狼羊过河问题
- Java编程能力强化——狼羊过河问题
- Java编程能力强化——狼羊过河问题
- 用程序解决过河问题
- 用队列解决农夫过河问题
- 用队列解决农夫过河问题
- 回溯法解决八人过河问题
- 解决java编程乱码问题
- 商人过河问题的Java实现1
- ssh公钥无需输入密码访问其他机器
- C - A Great Alchemist
- 64部高智商电影
- http://movie.douban.com/doulist/14155603/
- Python切片操作
- Java解决编程猫狗鱼过河问题
- 个回复的回复的华国锋的郭德纲
- 安装DBDesigner4之路 for linux mint(ubuntu)
- 和规范化个凤凰股份合格的风格的师傅都是
- Customizing Navigation Bar and Status Bar in iOS 7 .
- HRBUST1109(KMP)
- 优化Android App性能?十大技巧
- 菜鸟运维笔记:安装MySQL,PHP及phpMyAdmin
- HDOJ-2044-一只小蜜蜂【fib数列】