用java代码实现,使用5升和6升的水杯装出3升的水
来源:互联网 发布:淘宝模板代码生成器 编辑:程序博客网 时间:2024/04/27 09:56
这道题是在多看阅读的码农最新一期中看到的,没有使用递归等算法,也不知道怎么使用嵌套函数,使用while循环实现,将问题抽象出来就可以慢慢解决了。
package cn.ahern88.algorithm;/** * 问题描述: * 有一个大的河塘,里面有无限的水源,你只有一个5升和6升的水杯,请使用一种方式组合出3升的水。 * @author ahern88 * @date 2014-07-29 */public class FillWater {/** * 问题抽象: * 使用x升和y升的水杯组合出z升的水。(x、y、z都为正整数) * 如果案例有解,那么应该有 ax + by = z (a,b为整数)的解。 * 想想,如果以上等式无解,那么是组合不出z升水的,因为 组合 的方式是倒满小的水杯, * 小的水杯再全部倒进大的水杯,再倒满小水杯这样直到大水杯满了,将大水杯倒掉,然后将 * 小水杯的水都倒进大水杯,然后再装满小水杯,小水杯再装满大水杯,这一系列反复的过程 * 都可以看到,到给小水杯的水是整数倍,而从大水杯倒出去的水也是整数倍,所以以上方程 * 必须要有整数解。 */public static void main(String[] args) {startFillWater(5, 6, 3);}/** * 开始装水 * @param x * 小水杯容量 * @param y * 大水杯容量 * @param z * 要得到的容量 */public static void startFillWater(int x, int y, int z) {if (x + y < z || z < 0) {System.out.println("此题无解....");return;}if ( x > y) {int _t = x;x = y;y = _t;}// 定义大小水杯中已装的水量System.out.println("开始装水......");int a = 0, b = 0;if (y - x == z) {// 先倒入大水杯System.out.println("大水杯倒满" + x + "升水!");b = y;// 再用大水杯将小水杯倒满,大水杯余下的就是zSystem.out.println("用大水杯的水倒满小水杯!");b = y - a;System.out.println("OK!现在大杯中有 " + z + " 升水");return;}// 先将小水杯装满System.out.println("小水杯倒满" + x + "升水!");a = x;// 将小水杯水倒入大水杯System.out.println("将小水杯倒" + x + "升水到大水杯!");b = a;a = 0;System.out.println("现在水量:" + "小(" + a + "), 大(" + b + ")");int i = 0;while (a != z) {if(a != 0) {System.out.println("将小水杯倒" + a + "升水到大水杯!");b = a;a = 0;}System.out.println("小水杯倒满" + x + "升水!");a = x;System.out.println("将小水杯的水慢慢倒入到大水杯!");if(a + b > y) {int temp = y - b;System.out.println("大水杯满了,清空它");b = 0;a = a - temp;} else {b = b + a;a = 0;}System.out.println("现在水量:" + "小(" + a + "), 大(" + b + ")");if(i++ >= 1000) {System.out.println("已经尝试了1000次,此题可能无解!");return;}}System.out.println("OK!现在小杯中有 " + z + " 升水");}}
0 0
- 用java代码实现,使用5升和6升的水杯装出3升的水
- 水杯的测试用例
- 教宝宝使用水杯的正确方法
- 网友5万装出时尚两居 清新淡雅的居室清单(图)-1
- 网友5万装出时尚两居 清新淡雅的居室清单(图)-2
- 王二小只好装出很听话的电影样子在前面引路
- 如何装出高逼格的64位win7系统
- 使用java代码实现邮件的发送
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
- java水杯
- 用Java实现断点续传的基本思路和代码
- 用java代码实现生产者和消费者的问题
- Java代码:用jxl实现excel的读取和写入
- 一道有趣的笔试题( 水杯量水问题 )
- [转载] 经典测试用例: 一个水杯的测试
- 经典测试用例,一个水杯的测试
- 经典测试用例,一个水杯的测试
- 一个纸水杯的测试用例设计
- 为什么你应该选择房屋经纪代理和豪华房产商
- 一站式解决方案对于所有的设计和施工问题
- 互联网思维,谁的思维?
- android 学习一: Context 类
- Z0-820 - 的Oracle Solaris 11系统管理员,概述
- 用java代码实现,使用5升和6升的水杯装出3升的水
- DateUtils所有时间函数
- WordPress的主题特色A 9页模板,例如无礼摘要基于模板的布局和DESIG
- 规范激光焊接规划局规划局各环节各环节好久各环节
- Lebbeus伍兹建筑木
- bzoj1635 [Usaco2007 Jan]Tallest Cow 最高的牛
- MYSQL入门学习之一:基本操作
- Android读写文件
- KITJoiner.BF.6.constructor移除 - 如何彻底和顺手钱取出KITJoiner.BF.6.constructor