水壶问题

有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。

裴蜀定理(或贝祖定理):
若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。

边界问题的处理:
当x=0或者y=0时,判断y==z或x==y;
当z=0时,直接返回true;
当x+y<z的时候直接返回False。

测试示例:
示例1:
输入: x = 3, y = 5, z = 4
输出: True
示例2:
输入: x = 2, y = 6, z = 5
输出: False

  1. package Artificial;
  2. import java.util.*;
  3. public class Kettle {
  4. public static void main(String[] args) {
  5. System.out.println("请输入两个水壶的容量以及需要求的水的升数:");
  6. Scanner sc = new Scanner(System.in);
  7. int a = sc.nextInt();
  8. int b = sc.nextInt();
  9. int c = sc.nextInt();
  10. System.out.println(canMeasureWater(a,b,c));;
  11. }
  12. //求最大公约数
  13. public static int euclid(int inte1, int inte2) {
  14. int surplus ;
  15. surplus = inte1%inte2;
  16. while(surplus != 0) {
  17. inte1 = inte2;
  18. inte2 = surplus ;
  19. surplus = inte1%inte2;
  20. }
  21. return inte2;
  22. }
  23. public static boolean canMeasureWater(int x, int y, int z){
  24. // 首先判断约束条件
  25. if(x == 0) return y == z;
  26. if(y == 0) return x == z;
  27. if(z == 0) return true;
  28. if(x+y < z) return false;
  29. int num = euclid(x,y);
  30. if((z%num)!=0) return false;
  31. else return true;
  32. }
  33. }