倒油题目(Java源代码)
来源:互联网 发布:中国历年gdp数据和排名 编辑:程序博客网 时间:2024/05/07 16:35
题目如下:有一位厨师要从盛12斤油(a桶)的桶中倒出6斤油来,可是手边只有盛8斤油(b桶)和盛5斤油(c桶)的两个桶,问如何操作才能将6斤取出来呢?
代码如下:
文件1
public class DaoYou{ public static void main(String args[]){ DaoYou t = new DaoYou(); t.t1(); } //2:有一位厨师要从盛12斤油(a桶)的桶中倒出6斤油来,可是手边只有盛8 //斤油(b桶)和盛5斤油(c桶)的两个桶,问如何操作才能将6斤取出来呢? private void t1(){ Tong t1 = new Tong(); t1.max = 10; t1.now = 10; Tong t2 = new Tong(); t2.max = 7; t2.now = 0; Tong t3 = new Tong(); t3.max = 3; t3.now = 0; Tong ts[] = new Tong[3]; ts[0] = t1; ts[1] = t2; ts[2] = t3; MySet set = new MySet(); set.add(ts); stepDaoYou(set); } int end = 5; private void stepDaoYou(MySet setKeNeng){ for(Object objs : setKeNeng.getAll()){ Tong ts[] = (Tong[])objs; //1:判断是否已经已完成 if(ts[0].now==end || ts[1].now==end || ts[2].now==end){ System.out.println("倒油完成---"+ts[0].now+","+ts[1].now+","+ts[2].now); break; } //2:递归 stepDaoYou(keNengDaoYou(ts)); } } MySet yiDao = new MySet(); private MySet keNengDaoYou(Tong [] ts){ MySet setKeNeng = new MySet(); System.out.println("A=="+ts[0].now+",B=="+ts[1].now+",C=="+ts[2].now); for(int i=0;i<ts.length;i++){ for(int j=0;j<ts.length;j++){ //1:不能自己给自己倒 if(i==j){ continue; } //2:算出能倒多少 int canDaoYou = ts[i].canOut(); if(ts[i].canOut() > ts[j].canIn()){ canDaoYou = ts[j].canIn(); } //3:模拟倒 ts[i].out(canDaoYou); ts[j].in(canDaoYou); //4:判断这个倒油的步骤是否已经出现过了 if(yiDao.contains("A="+ts[0].now+",B="+ts[1].now+",C="+ts[2].now)){ //已经出现了,不能这么倒,否则就死循环了 //还回去 ts[i].in(canDaoYou); ts[j].out(canDaoYou); // continue; } //5:说明可以这么倒油 //5.1:先在已倒里面加入新的可能的倒油情况 yiDao.add("A="+ts[0].now+",B="+ts[1].now+",C="+ts[2].now); //5.2添加可能性 Tong newTs[] = new Tong[3]; Tong t1 = new Tong(); t1.max = ts[0].max; t1.now = ts[0].now; Tong t2 = new Tong(); t2.max = ts[1].max; t2.now = ts[1].now; Tong t3 = new Tong(); t3.max = ts[2].max; t3.now = ts[2].now; newTs[0] = t1; newTs[1] = t2; newTs[2] = t3; System.out.println("keneng------------------>"+"A="+ts[0].now+",B="+ts[1].now+",C="+ts[2].now); setKeNeng.add(newTs); //6:把油还回去 ts[i].in(canDaoYou); ts[j].out(canDaoYou); } } return setKeNeng; }}class Tong{ //最大值 public int max = 0; //当前值 public int now = 0; public void in(int a){ now += a; } public void out(int a){ now -=a; } public int canIn(){ return (max - now); } public int canOut(){ return now; } }
文件2:
public class MySet{ //用来存放所有添加进来的对象,初始长度为0表示开始是空的 private Object[] objs = new Object[0]; public boolean contains(Object obj){ for(Object tm : objs){ if(tm.equals(obj)){ return true; } } return false; } public boolean add(Object obj){ //判断是否重复 if(contains(obj)){ return false; } //1:创建一个新的数组,长度为原来数组长度加1 Object [] tempObjs = new Object[objs.length + 1]; //2:复制原来的数组对象到新的数组对象 System.arraycopy(objs,0,tempObjs,0,objs.length); //3:把对象添加到新的数组的最后一个 tempObjs[objs.length] = obj; //4:把新的数组赋值给原来的数组对象 objs = tempObjs; return true; } public Object[] getAll(){ return objs; } public int getLen(){ return objs.length; } }
1 0
- 倒油题目(Java源代码)
- java倒油分析
- Java入门级题目及源代码(上)
- Java入门级题目及源代码(下)
- 字符串倒排(java)
- 降落伞倒拉法拉直过程仿真(源代码)
- 倒油问题,广度优化搜索,java
- 深度优先搜索例题------Java倒油
- java 倒excel表
- java 打印倒三角
- java倒三角输出
- 倒三角形 java实现
- Java:单词倒排
- Python 正三角 倒三角 菱形 源代码
- HDOJ 题目4496 D-City(倒着的并查集)
- poj 1606 bfs(倒油)
- DFS(深搜) 倒油问题
- java输出菱形(正金字塔+倒金字塔)
- 用CHI检验提取文本特征词
- 【拔苗计划】linux学习笔记——netstat命令学习
- 各种编程语言的深度学习库整理大全
- JSON需要的jar包和和String类型转JSON
- 利用firebug调试控件样式
- 倒油题目(Java源代码)
- 1099. Build A Binary Search Tree (30)
- VC6LineNumberAddin.dll 在win7x64下的注册问题
- Android实现自定义的相机
- iOS开发-3DTouch开发
- 长期利率中枢下行 大类资产配置倾向高评级长久期固收产品
- 编写你的第一个PHP脚本:反馈表单脚本
- String,StringBuffer,StringBuilder效率与内存占用比较
- Broadcast的基本应用