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();
}

}

老农解决猫狗鱼的问题(黑马基础习题)相关推荐

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

    import java.util.ArrayList; import java.util.List; import java.util.Random;/*** 一位老农带着猫.狗.鱼过河,河边有一条船 ...

  2. 黑马程序员------黑马基础测试题参考

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马基础测试题抽中了几道比较复杂的题目,,已测试完美运行. 因为是零基础所以写的不好请见谅.如果 ...

  3. 机器学习03:使用logistic回归方法解决猫狗分类问题

    机器学习03:使用logistic回归方法解决猫狗分类问题 文章目录 机器学习03:使用logistic回归方法解决猫狗分类问题 前言 1. Logistic回归原理 1.1 从线性回归说起 1.2 ...

  4. 机器学习05:SVM支持向量机的学习和应用SVM解决猫狗图像分类问题

    机器学习05:SVM支持向量机的学习和应用SVM解决猫狗图像分类问题 文章目录 机器学习05:SVM支持向量机的学习和应用SVM解决猫狗图像分类问题 前言 1.从二维线性模型说起 2. 如何求解SVM ...

  5. 001_02-python基础习题答案

    python 基础习题 执行 Python 脚本的两种方式 如:脚本/python/test.py 第一种方式:python /python/test.py 第二中方式:在test.py中声明:/us ...

  6. 计算机基础知识图谱,基于知识图谱的大学计算机基础习题推荐方法技术

    本发明专利技术公开了一种基于知识图谱的大学计算机基础习题推荐方法,基于大学计算机基础知识点构建的知识图谱,使用图团体检测算法从知识点之间的关系结构上分析知识点间的关联性,从而推荐与学生错误知识点关联性 ...

  7. 独立于计算机系统的是 用户模式,第6章 数据库技术基础习题

    一.判断题(该题若正确,则在括号内画Ö,若错误,则在括号内画´.) 1. 任何一个二维表就是一个关系.( ) 2. 在关系中元组的顺序是无关紧要的.( ) 3. 关系模型的完整性规则是对关系的约束条件 ...

  8. 不同的计算机硬件设备之间,计算机应用基础习题答案22257.doc

    计算机应用基础习题答案22257 二章 === === 的8421码为0110011110001001 数据总线为数据信息在系统模块之间的传输提供通信线路 地址总线用来指明数据总线上的数据的源地址或目 ...

  9. 量子计算机区别于冯诺依曼机的一个显著特点,大学计算机基础习题答案西安交大.doc...

    大学计算机基础习题答案西安交大 习题参考答案 习题一 1.第一代计算机的主要部件是由( 电子管和继电器 )构成的. 2.未来全新的计算机技术主要指( 光子计算机生物计算机量子计算机 3.按照Flynn ...

最新文章

  1. 21年最新Python面试题及答案汇总详解(上)
  2. vs2012 发布网站时出现 sgen.exe 已退出 代码为 1
  3. 前端学习(2984):一文理解数据劫持2
  4. 点击表格弹窗获取另外一套数据之后,原表格相关数据的调用
  5. LeetCode 1003. 检查替换后的词是否有效(栈)
  6. mysql数据存储过程详解_mysql数据存储过程参数实例详解
  7. 2017-2018-2 20165218 实验五《网络编程与安全》实验报告
  8. paip.检测信用卡账单数据的正确性算法
  9. Java开发手册之二方库依赖
  10. stable diffusion制作韩国版AI女友关键词
  11. 微信上一定有重做贴吧的机会!
  12. Mac下如何将Safari书签导入Chrome
  13. PS mac版的下载地址,百度软件中心
  14. 头一回见!提升10倍效率,阿里给业务校验平台插上了AI的翅膀
  15. h3c r4900服务器系统安装,H3C R4900 G3安装CentOS 6.7网卡配置方法
  16. neo4j图数据库安装实践与报错解决
  17. 大数据-玩转数据-Maxcompute DDL
  18. linux 不同电脑cp,linux命令:拷贝命令家族(cp、scp、rsync)
  19. 如何进入VMware Fusion虚拟机BIOS
  20. python用ocr技术识别_使用Python和OCR实现图像识别

热门文章

  1. 信号分析与处理——拉普拉斯变化
  2. 南加大计算机硕士学制,南加州大学研究生学制几年
  3. Cesium的学习之路(二):底图切换
  4. Linux下穿透内网跨平台远程控制与被控制
  5. 爬虫爬取糗事百科图片数据
  6. 我总是那么傻,爱的那么真,最后伤了自己:情感日志
  7. 关于计算机如何实现减法操作
  8. 日语五十音 第一课 上
  9. efi linux win10,WIN10+UBUNTU15.04 kylin(EFI+GPT)
  10. 人到中年,越活越抠,越活越卑微