博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA代码—算法基础:水壶分水的问题
阅读量:4041 次
发布时间:2019-05-24

本文共 2351 字,大约阅读时间需要 7 分钟。

水壶分水问题

问题描述: 给你两壶容量的X和Y升。有无限量的水供应。你需要确定它是否可以准确的使用这两个水壶测量出Z升水。

如果z升的水是可测量的,你必须在一个或两个桶内含有z升的水。
允许操作:
1、给任意一个水壶装满水
2、清空任何一个水壶的水
3、把水从一个水壶倒到另一个水壶里,直到另一个水壶完全装满,或者第一个水壶本身是空的。

输入样例: x = 3, y = 5, z = 4

输出结果: True

输入样例: x = 2, y = 6, z = 5

输出结果: False

算法设计

package com.bean.algorithmbasic;public class WaterAndJugProblem {
/* * 给你两壶容量的X和Y升。有无限量的水供应。你需要确定它是否可以准确的使用这两个水壶测量出Z升水。 * 如果z升的水是可测量的,你必须在一个或两个桶内含有z升的水。 * 允许操作: * 给任意一个水壶装满水 * 清空任何一个水壶的水 * 把水从一个水壶倒到另一个水壶里,直到另一个水壶完全装满,或者第一个水壶本身是空的。 * * 输入样例: x = 3, y = 5, z = 4 * 输出结果: True * * 输入样例: x = 2, y = 6, z = 5 * 输出结果: False * */ /* * 算法设计一: * */// public static boolean canMeasureWater(int x, int y, int z) {
// if(x + y < z) return false;// if( x == z || y == z || x + y == z ) return true; // return z%gcd(x, y) == 0;// } // // public static int gcd(int a, int b){
// if(b == 0) return a;// return gcd(b, a % b);// } public static void swap(int x, int y) { int temp=x; x=y; y=temp; } /* * 算法设计二: * 1、如果水壶X的容量等于Z,或者水壶Y的容量等于Z,或者水壶X+水壶Y的容量等于Z,则返回true; * 2、如果水壶Y中当前水的容量等于Z,或者水壶X中当前水的容量+水壶Y中当前水的容量等于Z,则返回true; * (因为假设水壶Y的容量大,使用尝试用水壶Y尽可能多装水。) * 3、 * * * */ public static boolean canMeasureWater(int x, int y, int z) { //假设水壶Y的容量大于水壶X if (x > y) swap(x, y); if (x == z || y == z || x + y == z) return true; //specific cases int currX = x; //current water amount in smaller jug int currY = x; //current water amount in larger jug if (x != 0 && y != 0) { while (true) { //如果当前水壶Y的水量等于Z或者 当前水壶X和Y的水量之和等于Z,则返回true if (currY == z || currX + currY == z) return true; if (y - currY == currX) break; else if (y - currY > currX) { currY = currY + currX; currX = x; } else { currX = currX - (y - currY); currY = 0; } } } return false; } public static void main(String[] args) { // TODO Auto-generated method stub boolean flag=canMeasureWater(3,5,4); //boolean flag=canMeasureWater(2,6,5); System.out.println(flag); }}

(完)

转载地址:http://bgvdi.baihongyu.com/

你可能感兴趣的文章
架构设计和代码开发中的一些常用原则
查看>>
maven配置文件内嵌
查看>>
jvm高级特性整理
查看>>
SQL查询优化
查看>>
秒杀系统
查看>>
使用Jsoup抓取页面的数据
查看>>
时间工具类
查看>>
mybatis foreach
查看>>
微信验证域名
查看>>
Java实现微信JS-SDK【一】配置篇
查看>>
java合成图片
查看>>
httpclient 4.3.2 post get的工具类
查看>>
taskExecutor使用
查看>>
微信朋友圈分享
查看>>
eclipse安装JAVA反编译插件
查看>>
ip限制
查看>>
IE6 png 透明
查看>>
列表拖动排序
查看>>
select实例,拼音检索
查看>>
Spring MVC @Transactional注解方式事务失效的解决办法
查看>>