A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 眼镜你别跑 中级黑马   /  2014-7-3 16:53  /  1178 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。

5 个回复

倒序浏览
建议分成三种情况讨论:可以用if语句,分别详细的考虑,比如当农夫先带狗过河的时候同时把猫带着,然后再把猫带回来,然后接着带鱼过河。你可以就按照这个思路分析。希望对你思路有帮助。
回复 使用道具 举报
package zuolianxi;

import java.util.ArrayList;
import java.util.List;

public class AllText {
        class Animal {

                // 解题思路:先带走猫,后带走狗,再把猫带回,把鱼带过去,最后再把猫带过去即可

                // 定义两个集合,存放,带过去的动物,和剩下的动物
                List<String> there = new ArrayList<String>();
                List<String> here = new ArrayList<String>();

                public void main(String[] args) {
                        here.add("cat");
                        here.add("dog");
                        here.add("fish");

                        Animal animal = new Animal();
                        animal.take();
                }

                // 判断动物是否安全
                public boolean isSafty(List<String> list) {
                        // 如果一个集合中同时出现了猫和狗,猫和鱼的都认为不安全
                        if (list.add("dog") && list.add("cat") || list.add("cat")&& list.add("fish")) {
                                       
                                return false;
                        }
                        return true;
                }

                public void take() {
                        // 得到要带走的动物
                        String anim = here.get(0);
                        // 从剩下的集合中删除
                        here.remove(here.get(0));

                        if (anim.equals("cat")) {

                                // 添加到以带过去的集合里面
                                there.add(anim);

                                // 继续带下一个动物
                                if (here.isEmpty()) {
                                        System.out.println();
                                        System.out.println("最后在把" + anim + "带走了");
                                        return;
                                } else {
                                        System.out.println("带走了" + anim);
                                        System.out.print("剩下:");
                                        for (String s : here) {
                                                System.out.print(s + "   ");
                                        }
                                        System.out.println();
                                        System.out.println("----------------------------");
                                        take();
                                }

                        } else if (anim.equals("dog")) {
                                there.add(anim);
                                System.out.println("然后把" + anim + "带走");
                                // 判断是否安全,之后继续带下一个动物
                                if (isSafty(there)) {
                                        take();
                                } else {
                                        String animal = there.get(0);
                                        there.remove(animal);
                                        here.add(animal);
                                        System.out.println("然后把" + animal + "带回");
                                        // 继续带下一个动物
                                        take();
                                }
                        } else if (anim.equals("fish")) {
                                System.out.print("之后把" + anim + "带走");

                                take();
                        }
                }
        }

}
回复 使用道具 举报
if else if else,这样写
回复 使用道具 举报
遇到这题的真悲剧
回复 使用道具 举报
谢谢了,呵呵,很不错的答案
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马