黑马程序员技术交流社区
标题:
这个题,我一点思路都没有
[打印本页]
作者:
眼镜你别跑
时间:
2014-7-3 16:53
标题:
这个题,我一点思路都没有
一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
作者:
SLJ_920808
时间:
2014-7-3 20:24
建议分成三种情况讨论:可以用if语句,分别详细的考虑,比如当农夫先带狗过河的时候同时把猫带着,然后再把猫带回来,然后接着带鱼过河。你可以就按照这个思路分析。希望对你思路有帮助。
作者:
.____盒子
时间:
2014-7-3 21:32
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();
}
}
}
}
作者:
唐晓东
时间:
2014-7-3 21:51
if else if else,这样写
作者:
空心祭
时间:
2014-7-4 09:33
遇到这题的真悲剧
作者:
眼镜你别跑
时间:
2014-7-5 10:19
谢谢了,呵呵,很不错的答案
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2