365. Water and Jug Problem
2016-06-26 14:53
375 查看
题目:
You are given two jugs with capacities x and y litres. There is an infinite amount of water supply available. You need to determine whether it is possible to measure exactly zlitres using these
two jugs.
If z liters of water is measurable, you must have z liters of water contained within one or both buckets by the end.
Operations allowed:
Fill any of the jugs completely with water.
Empty any of the jugs.
Pour water from one jug into another till the other jug is completely full or the first jug itself is empty.
Example 1: (From the famous "Die Hard" example)
Example 2:
题意:
给定两个容量分别为x和y升的罐子。提供无限容量的水。你需要判断用这两个罐子是否可以恰好量出z升的体积。到最后量出的z升体积可以由一到两个罐子装着。
允许的操作包括:
1、将任意罐子灌满。
2、将任意罐子清空。
3、将任意罐子的水倒入另一个罐子,直到另一个罐子倒满或者自己为空为止。
思路:
求最大公约数GCD(Greatest Common Divisor)。
如果x与y互质(最大公约数为1),则容量范围[1, max(x, y)]之内的任意整数体积均可以通过适当的操作得到。
否则,记x与y的最大公约数为gcd,则可以获得的容量z只能为gcd的整数倍,且z <= max(x, y)。
代码:0ms
public class Solution {
public boolean canMeasureWater(int x, int y, int z) {
//最后可量的水可以装在一个或者两个罐子内
if (x+y<z) return false;
//x或者y为0的情况
if (x==z || y==z || x+y==z) return true;
//利用得到的最大公约数
return z%GCD(x, y) == 0;
}
//得到最大公约数
public static int GCD(int a, int b){
while (b != 0) {
int temp = b;
b = a%b;
a = temp;
}
return a;
}
}
代码:0ms
public class Solution {
public boolean canMeasureWater(int x, int y, int z) {
//最后可量的水可以装在一个或者两个罐子内
if (x+y<z) return false;
//x或者y为0的情况
if (x==z || y==z || x+y==z) return true;
//利用得到的最大公约数
return z%GCD(x, y) == 0;
}
//得到最大公约数
public static int GCD(int a, int b){
return b==0 ? a : GCD(b, a%b);
}
}
You are given two jugs with capacities x and y litres. There is an infinite amount of water supply available. You need to determine whether it is possible to measure exactly zlitres using these
two jugs.
If z liters of water is measurable, you must have z liters of water contained within one or both buckets by the end.
Operations allowed:
Fill any of the jugs completely with water.
Empty any of the jugs.
Pour water from one jug into another till the other jug is completely full or the first jug itself is empty.
Example 1: (From the famous "Die Hard" example)
Input: x = 3, y = 5, z = 4 Output: True
Example 2:
Input: x = 2, y = 6, z = 5 Output: False
题意:
给定两个容量分别为x和y升的罐子。提供无限容量的水。你需要判断用这两个罐子是否可以恰好量出z升的体积。到最后量出的z升体积可以由一到两个罐子装着。
允许的操作包括:
1、将任意罐子灌满。
2、将任意罐子清空。
3、将任意罐子的水倒入另一个罐子,直到另一个罐子倒满或者自己为空为止。
思路:
求最大公约数GCD(Greatest Common Divisor)。
如果x与y互质(最大公约数为1),则容量范围[1, max(x, y)]之内的任意整数体积均可以通过适当的操作得到。
否则,记x与y的最大公约数为gcd,则可以获得的容量z只能为gcd的整数倍,且z <= max(x, y)。
代码:0ms
public class Solution {
public boolean canMeasureWater(int x, int y, int z) {
//最后可量的水可以装在一个或者两个罐子内
if (x+y<z) return false;
//x或者y为0的情况
if (x==z || y==z || x+y==z) return true;
//利用得到的最大公约数
return z%GCD(x, y) == 0;
}
//得到最大公约数
public static int GCD(int a, int b){
while (b != 0) {
int temp = b;
b = a%b;
a = temp;
}
return a;
}
}
代码:0ms
public class Solution {
public boolean canMeasureWater(int x, int y, int z) {
//最后可量的水可以装在一个或者两个罐子内
if (x+y<z) return false;
//x或者y为0的情况
if (x==z || y==z || x+y==z) return true;
//利用得到的最大公约数
return z%GCD(x, y) == 0;
}
//得到最大公约数
public static int GCD(int a, int b){
return b==0 ? a : GCD(b, a%b);
}
}
相关文章推荐
- 关于jFinal开发中遇到的中文乱码问题解决办法
- Fragment生命周期
- 失恋案例分析报告
- Word Break
- [置顶] ArcEngine Mosaic Dataset 镶嵌数据集总结 (持续补充中......)
- SQL.py
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)
- Dubbo&ZK分布式服务化改造(四)——Dubbo多注册中心 & 服务迁移
- Read-only file system
- android开发实现微博正文效果、顶部悬浮、ScrollView嵌套ListView
- 理解生产者消费者模型及在Python编程中的运用实例
- 本博说明
- lamp 部署命令
- day03_set讲解(01)
- ggplot2日期时间标度的设置
- nodejs的npm安装错误
- 设计模式系列(四)建造者模式Builder
- object_test.py
- linux dns 部署命令
- 本地化下按首字母分组排序的神器——UILocalizedIndexedCollation