这道题是在多看阅读的码农最新一期中看到的,没有使用递归等算法,也不知道怎么使用嵌套函数,使用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 + " 升水");}}

用java代码实现,使用5升和6升的水杯装出3升的水相关推荐

  1. java 判断手机访问_下面java代码判断是手机访问还是PC访问什么地方出错了,手机跳转不到制定页面,等待解答...

    最近在做一个项目,要在判断用户是否是通过手机访问网站的,如果是手机访问网站跳到一个登录页面,如果是用户用电脑访问网站跳到另外一个登录页面.我写了以下代码,但是用手机访问网站的时候,跳转不到制定页面,请 ...

  2. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  3. cmd怎么实现Java你好_java环境配置以及如何在cmd窗口运行java代码

    对于初学java的人来说,电脑的环境配置也许会让你头疼,但只要你认真一些学习,相信对你来说都是OK的啦~ 首先回到桌面,选择我的电脑,单击右键属性,进入高级系统设置,点击环境变量设置.用户变量选择Te ...

  4. Android 使用java 代码获取res 里面的value 定义的数组

    现在res value 里面定义了一个array.xml 内容如下 <?xml version="1.0" encoding="utf-8"?> & ...

  5. 使用JAVA代码实现Android布局(一)RelativeLayout

    通常我们使用XML来书写Android的图形界面,XML虽然编写方便,但是在某些情况下不如JAVA代码灵活,所以在某些环境下还是必须使用JAVA代码来编写界面.我们以下XML代码为例,编写相应的JAV ...

  6. 转--Android如何在java代码中设置margin

    ========  3 在Java代码里设置button的margin(外边距)? 1.获取按钮的LayoutParams LinearLayout.LayoutParams layoutParams ...

  7. java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...

    标签: 今天通过网络资源研究了一下如何使用Java代码获取文件.文件流或字符串的编码方式,现将代码与大家分享: package com.ghj.packageoftool; import info.m ...

  8. matlab中调用java代码_Matlab中调用第三方Java代码

    在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...

  9. 5个常用Java代码混淆器 助你保护你的代码

    [IT168 技术文档] 从事Java编程的人都知道,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具之一就是JAD.因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以使用 ...

最新文章

  1. 华盛顿大学《生成模型》2020秋季课程完结,课件、讲义全部放出
  2. vim 初学简单设置
  3. 介绍linux下Source Insight强大代码编辑器sublime_text_3
  4. 如何减少tomcat内存使用量?
  5. 多样性算法在58部落的实践和思考
  6. vmware安装centos6-步骤小结
  7. java平方和和立方和3_平方和与立方和
  8. 【常用软件下载地址】java开发官方资源下载网址大全(持续更新)
  9. flash编译器错误查询表
  10. 网络安全认证与加密协议算法整合
  11. 洛谷 P2689 东南西北
  12. 利用ESP8266模块制作便携WiFi杀手进行deauth攻击
  13. 按“window+E”键出现【找不到应用程序】或【explore.exe找不到】的解决方法
  14. 回顾敏捷实践踩过的坑:如果重新做,我会这样做(一)
  15. 3、Qt5 主窗口点击按钮 弹出另一个自定义窗口
  16. sql 盲注 (web渗透)
  17. TMC2208-LA步进电机驱动芯片
  18. 用HTML+bootstrap制作个人简历
  19. 将Windows7屏幕外的窗口拖回
  20. 使用GGE开发Google小工具(Google Gadget)

热门文章

  1. ubuntu 18.04 新配主机 无wifi适配器 找不到wifi问题解决
  2. dtree.js菜单列表加密,实现Code
  3. 如何用AVS Video Editor这款视频编辑软件消除音频噪音?
  4. EXCEL VBA学习例子之【升降序】
  5. 在职计算机技术考研英语自我介绍,2019考研复试英语自我介绍范文--在职考研
  6. 57步进电机了解与实践笔记
  7. 淘宝天猫商家运营,淘宝验号查号是什么意思,有什么作用
  8. 数字信号处理实验一(离散时间信号的MATLAB实现)
  9. php emoji 保存 显示,PHP开发中涉及到emoji表情的几种处理方法
  10. Java之工厂设计模式