老农解决猫狗鱼的问题(黑马基础习题)
来源:互联网 发布:网络被骗赌博钱能追回 编辑:程序博客网 时间:2024/04/29 20:40
package com.itheima;
import java.util.LinkedList;
import java.util.List;
/**
* 题目:
* 10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
* 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
* @author 杨文冬
* 思路:
* 在这道题目中猫比较特殊,当它存在时会与其它动物冲突,所以每次老农携带动物时要考虑是否安全
* 用左右两个list来存储两岸的动物,当左岸为空时,成功过岸
*/
public class Test10 {
//定义私有成员变量用来存放两岸的动物
private LinkedList<String> left = new LinkedList<String>();
private LinkedList<String> right = new LinkedList<String>();
//构造方法
public Test10() {//初始化左岸
left.add("dog");
left.add("cat");
left.add("fish");
}
public void cross() {//过岸方法
System.out.println("老农解决猫鱼狗问题");
//当左岸不为空时程序要继续运行
while(left.size() > 0) {
//依次考虑左岸右岸
move(left, right);//左岸-->右岸
//右岸-->左岸
if (right.size() == 3) {//所有动物都到达,结束方法
break;
} else if (issafe(right)) {//如果右岸安全,老农返回左岸
System.out.println("老农独自返回");
}else { //右岸为“左岸”考虑
move(right, left);
}
}
}
//老农携带动物从“左岸”到“右岸”
private void move(LinkedList<String> leftside, LinkedList<String> rightside) {
//左岸,每次从“左岸”第一个动物开始判断是否可以安全带走,
String lr = leftside.equals(left)?"右":"左";//用于记录老农移动方向
while (true) {//依次判断老农可以安全带走的动物
rightside.add(leftside.pollFirst()); //将左岸第一只动物移到右岸放到最后
if (issafe(leftside)) {//如果左岸安全
System.out.println("老农带着" + rightside.getLast() + "到" + lr + "岸");
break; //如果可以带到右岸则左岸结束考虑右岸
}else {
leftside.add(rightside.pollLast());//左岸不安全,撤销原操作,将不能带走的动物放到最后
}
}
}
//判断某岸是否安全
private boolean issafe(List<String> l) {
if(l.contains("cat") && l.size() > 1) {
return false;
}
return true;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test10 test = new Test10();
test.cross();
}
}
import java.util.LinkedList;
import java.util.List;
/**
* 题目:
* 10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
* 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
* @author 杨文冬
* 思路:
* 在这道题目中猫比较特殊,当它存在时会与其它动物冲突,所以每次老农携带动物时要考虑是否安全
* 用左右两个list来存储两岸的动物,当左岸为空时,成功过岸
*/
public class Test10 {
//定义私有成员变量用来存放两岸的动物
private LinkedList<String> left = new LinkedList<String>();
private LinkedList<String> right = new LinkedList<String>();
//构造方法
public Test10() {//初始化左岸
left.add("dog");
left.add("cat");
left.add("fish");
}
public void cross() {//过岸方法
System.out.println("老农解决猫鱼狗问题");
//当左岸不为空时程序要继续运行
while(left.size() > 0) {
//依次考虑左岸右岸
move(left, right);//左岸-->右岸
//右岸-->左岸
if (right.size() == 3) {//所有动物都到达,结束方法
break;
} else if (issafe(right)) {//如果右岸安全,老农返回左岸
System.out.println("老农独自返回");
}else { //右岸为“左岸”考虑
move(right, left);
}
}
}
//老农携带动物从“左岸”到“右岸”
private void move(LinkedList<String> leftside, LinkedList<String> rightside) {
//左岸,每次从“左岸”第一个动物开始判断是否可以安全带走,
String lr = leftside.equals(left)?"右":"左";//用于记录老农移动方向
while (true) {//依次判断老农可以安全带走的动物
rightside.add(leftside.pollFirst()); //将左岸第一只动物移到右岸放到最后
if (issafe(leftside)) {//如果左岸安全
System.out.println("老农带着" + rightside.getLast() + "到" + lr + "岸");
break; //如果可以带到右岸则左岸结束考虑右岸
}else {
leftside.add(rightside.pollLast());//左岸不安全,撤销原操作,将不能带走的动物放到最后
}
}
}
//判断某岸是否安全
private boolean issafe(List<String> l) {
if(l.contains("cat") && l.size() > 1) {
return false;
}
return true;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test10 test = new Test10();
test.cross();
}
}
0 0
- 老农解决猫狗鱼的问题(黑马基础习题)
- 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
- Java解决编程猫狗鱼过河问题
- 农夫运送猫狗鱼过河问题(面向对象)
- 农夫带猫狗鱼过河的题目
- 老农猫、狗、鱼过河问题 黑马测试题,个人的解答.靠程序搜索答案 只给判断条件,无人为辅助判断
- 老农的计算机学习笔记(一)计算机的诞生及其基础
- 老农过河问题
- 黑马程序员-----第十题 : 一位老农带着猫、狗、鱼过河问题
- 老农的计算机笔记(四)关于编程语言
- C结构体指针(和老农交流的)
- 老农的计算机学习笔记(二)硬件篇
- 老农的计算机笔记(三)软件篇
- 老农和驴子的故事
- 老农与石头的故事
- 黑马程序员:Java基础总结----多重For循环的解决数学问题
- #黑马程序员------基础习题练习总结
- 老农移石故事的启示分享
- SimpleAcousticScorer API 简单声学打分器
- UGUI实现unity摇杆
- ffmpeg 音频播放器的播放没声音的问题
- Ubuntu中安装HBase
- 修改RedHat启动项
- 老农解决猫狗鱼的问题(黑马基础习题)
- 黑马程序员---IO流-异常
- 【设计模式】策略模式详解
- Android 绘图和shape圆形
- 40 个超棒的免费 Bootstrap HTML5 网站模板
- Developing for Android V: The Rules: Language and Libraries
- ThreadedAcousticScorer API
- poj2186
- string 与char*、 char[]之间的转换